Czy istnieją jakieś biblioteki uwierzytelniania użytkowników dla node.js? W szczególności szukam czegoś, co może wykonać uwierzytelnianie hasła dla użytkownika (przy użyciu niestandardowej bazy danych uwierzytelniania bazy danych) i powiązać tego użytkownika z sesją.
Zanim napisałem bibliotekę autorów, pomyślałem, że sprawdzę, czy ludzie wiedzą o istniejących bibliotekach. Nie można znaleźć niczego oczywistego za pomocą wyszukiwarki Google.
-Shreyas
omniauth
(szyny) lub pythonsocial-auth
. Użytkownicy PHP (i innych popularnych języków serwerów WWW) powinni również dodać swoje odpowiedniki.Odpowiedzi:
Jeśli szukasz struktury uwierzytelniania dla Connect lub Express, warto sprawdzić paszport: https://github.com/jaredhanson/passport
(Ujawnienie: Jestem programistą Passport)
Opracowałem paszport po zbadaniu zarówno funkcji connect-auth, jak i everyauth. Choć oba są świetnymi modułami, nie spełniły moich potrzeb. Chciałem czegoś bardziej lekkiego i dyskretnego.
Paszport jest podzielony na osobne moduły, więc możesz użyć tylko tego, czego potrzebujesz (OAuth, tylko w razie potrzeby). Usługa Passport nie instaluje także żadnych tras w aplikacji, co zapewnia elastyczność w decydowaniu o tym, kiedy i gdzie chcesz uwierzytelnić, a także kontroluje, co dzieje się, gdy uwierzytelnienie się powiedzie lub nie.
Na przykład oto dwuetapowy proces konfiguracji uwierzytelniania opartego na formularzu (nazwa użytkownika i hasło):
Dostępne są dodatkowe strategie uwierzytelniania za pośrednictwem Facebooka, Twittera itp. W razie potrzeby można podłączyć niestandardowe strategie.
źródło
done(null,false,{ message:'Incorrect username.' })
jest to okropne, ponieważ nie wiemy, jakie są wszystkie te parametry.Sesja + If
Sądzę, że powodem, dla którego nie znalazłeś wielu dobrych bibliotek, jest to, że korzystanie z biblioteki do uwierzytelniania jest w większości przypadków nadmiernie zaawansowane.
To, czego szukasz, to tylko segregator sesji :) Sesja z:
Otóż to.
Nie zgadzam się z twoim wnioskiem, że wtyczka connect-auth jest właściwą drogą.
Używam również connect, ale nie używam connect-auth z dwóch powodów:
IMHO łamie connect-auth bardzo potężną i łatwą do odczytania architekturę connect-ringową. Nie ma mowy - moja opinia :). Możesz znaleźć bardzo dobry i krótki artykuł o tym, jak działa connect i pomysł na krążek cebulowy tutaj .
Jeśli - jak napisano - po prostu chcesz użyć podstawowego lub http logowania do bazy danych lub pliku. Connect-auth jest zdecydowanie za duży. To coś więcej dla takich rzeczy jak OAuth 1.0, OAuth 2.0 & Co
Bardzo proste uwierzytelnianie za pomocą Connect
(Jest zakończony. Wystarczy go przetestować, ale jeśli chcesz go użyć w środowisku produkcyjnym, upewnij się, że używasz protokołu https) (Aby zachować zgodność z zasadą REST, powinieneś użyć żądania POST zamiast żądania GET b / c zmieniasz stan :)
UWAGA
Napisałem to oświadczenie ponad rok temu i obecnie nie mam aktywnych projektów węzłów. Mogą więc wystąpić zmiany API w Express. Dodaj komentarz, jeśli mam coś zmienić.
źródło
Wygląda na to, że wtyczka connect-auth do oprogramowania pośredniego Connect jest dokładnie tym, czego potrzebuję: http://wiki.github.com/ciaranj/connect-auth/creating-a-form-based-strategy
Korzystam z express [ http://expressjs.com ], więc wtyczka connect pasuje bardzo ładnie, ponieważ express jest podklasowany (ok - prototypowany) z connect
źródło
Zasadniczo szukałem tego samego. W szczególności chciałem:
Skończyło się na tym, że stworzyłem własną funkcję oprogramowania pośredniego
check_auth
, którą przekazuję jako argument do każdej trasy, którą chcę uwierzytelnić.check_auth
po prostu sprawdza sesję, a jeśli użytkownik nie jest zalogowany, następnie przekierowuje go na stronę logowania, w ten sposób:Następnie dla każdej trasy zapewniam, że ta funkcja jest przekazywana jako oprogramowanie pośrednie. Na przykład:
Wreszcie, musimy faktycznie obsługiwać proces logowania. Jest to proste:
W każdym razie takie podejście zostało zaprojektowane głównie jako elastyczne i proste. Jestem pewien, że istnieje wiele sposobów, aby to poprawić. Jeśli masz jakieś, bardzo chciałbym poznać Twoją opinię.
EDYCJA: To jest uproszczony przykład. W systemie produkcyjnym nigdy nie chcesz przechowywać i porównywać haseł w postaci zwykłego tekstu. Jak zauważa komentator, istnieją biblioteki, które mogą pomóc w zarządzaniu bezpieczeństwem haseł.
źródło
Spójrz także na allauth, jeśli chcesz zintegrować logowanie innych firm / sieci społecznościowe.
źródło
Oto kod do podstawowego uwierzytelnienia z jednego z moich projektów. Używam go przeciwko CouchDB zi dodatkowej pamięci podręcznej danych uwierzytelniania, ale usunąłem ten kod.
Owiń metodę uwierzytelnienia wokół obsługi żądań i zapewnij drugie wywołanie zwrotne w przypadku nieudanego uwierzytelnienia. Odwołanie powodzenia otrzyma nazwę użytkownika jako dodatkowy parametr. Nie zapomnij poprawnie obsługiwać żądań z błędnymi lub brakującymi poświadczeniami w wywołaniu zwrotnym niepowodzenia:
źródło
Innym podejściem do uwierzytelnienia jest uwierzytelnianie bez hasła, oparte na tokenach moduł dla express, który omija nieodłączny problem haseł [1]. Jest szybki do wdrożenia, nie wymaga zbyt wielu formularzy i oferuje większe bezpieczeństwo przeciętnego użytkownika (pełne ujawnienie: jestem autorem).
[1]: Hasła są przestarzałe
źródło
Minęło kilka lat i chciałbym przedstawić moje rozwiązanie uwierzytelniające dla Express. Nazywa się Lockit . Możesz znaleźć projekt na GitHub i krótkie wprowadzenie na moim blogu .
Jakie są zatem różnice w stosunku do istniejących rozwiązań?
require('lockit')
,lockit(app)
, sporządzonejusername
ipassword
.Spójrz na przykłady .
źródło
Istnieje projekt o nazwie Drywall, który implementuje system logowania użytkownika za pomocą Passport, a także ma panel administracyjny zarządzania użytkownikami. Jeśli szukasz w pełni funkcjonalnego systemu uwierzytelniania i zarządzania użytkownikami podobnego do tego, co ma Django, ale dla Node.js, to jest to. Uważam, że jest to naprawdę dobry punkt wyjścia do budowy aplikacji węzłowej, która wymagała uwierzytelnienia użytkownika i systemu zarządzania. Zobacz odpowiedź Jareda Hansona, aby uzyskać informacje na temat działania paszportu.
źródło
Oto dwie popularne biblioteki Github do uwierzytelniania węzła js:
https://github.com/jaredhanson/passport (sugerowany)
https://nodejsmodules.org/pkg/everyauth
źródło
Szybki prosty przykład użycia mongo, dla interfejsu API, który zapewnia autoryzację użytkownika, np. Klientowi Angular
w app.js
na trasie coś takiego:
Następnie na trasach wymagających uwierzytelnienia możesz po prostu sprawdzić sesję użytkownika:
źródło
Oto nowa biblioteka uwierzytelniania, która wykorzystuje tokeny ze znacznikami czasu. Tokeny można przesyłać użytkownikom pocztą e-mail lub SMS-em bez konieczności przechowywania ich w bazie danych. Może być używany do uwierzytelniania bez hasła lub do uwierzytelniania dwuskładnikowego.
https://github.com/vote539/easy-no-password
Ujawnienie: Jestem deweloperem tej biblioteki.
źródło
Jeśli potrzebujesz uwierzytelnienia przy użyciu jednokrotnego logowania (Single Sign On) przy użyciu konta użytkownika Microsoft Windows. Możesz spróbować https://github.com/jlguenego/node-expose-sspi .
Otrzymasz
req.sso
obiekt, który zawiera wszystkie informacje o użytkowniku klienta (login, nazwa wyświetlana, sid, grupy).Uwaga: Jestem autorem node-expose-sspi.
źródło
kochanie
Lekki moduł uwierzytelniania użytkownika o zerowej konfiguracji. Nie potrzebuje sperowanej bazy danych.
https://www.npmjs.com/package/sweet-auth
To proste jak:
źródło