Wymyśliłem!
Przede wszystkim musisz wdrożyć poprawną strategię. W moim przypadku LocalStrategy, i musisz podać swoją logikę walidacji. Na przykład sake, użyjmy tego w paszporcie-lokalnym.
var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
wywołanie zweryfikować powrotem podać function(username, password, done)
zajmie znalezienie użytkownika i sprawdzenie, czy hasło pasuje (poza zakresem pytania i moje odpowiedzi)
passport.js oczekuje kilka kawałków dla niego do pracy, po pierwsze zwraca się użytkownika w strategii. Próbowałem zmienić tę część kodu, a to było złe. Oddzwanianie oczekuje false
, jeśli sprawdzanie poprawności zakończy się niepowodzeniem, a object
(zweryfikowany użytkownik), jeśli się powiedzie.
Teraz .... jak zintegrować JWT?
W swojej trasie do logowania będziesz musiał obsłużyć udane uwierzytelnienie lub niepowodzenie. I tutaj musisz dodać token JWT. Podobnie jak:
(pamiętaj, aby wyłączyć sesję, w przeciwnym razie będziesz musiał wdrożyć funkcje serializacji i deserializacji, a nie potrzebujesz tych, jeśli nie trwasz w sesji, której nie używasz, jeśli używasz auth żeton based)
przykładów paszportowych lokalnego (z tokenu JWT dodanej)
// POST /login
// This is an alternative implementation that uses a custom callback to
// achieve the same functionality.
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err) }
if (!user) {
return res.json(401, { error: 'message' });
}
//user has authenticated correctly thus we create a JWT token
var token = jwt.encode({ username: 'somedata'}, tokenSecret);
res.json({ token : token });
})(req, res, next);
});
I to jest to! Teraz, kiedy wywołujesz/logujesz się, oraz nazwę użytkownika i hasło POST (które zawsze powinny być przez SSL) pierwszy fragment kodu powyżej spróbuje znaleźć użytkownika na podstawie podanej przez ciebie nazwy użytkownika, a następnie sprawdzić, czy hasło pasuje (Oczywiście, że będziesz musiał zmień to w zależności od potrzeb).
Po tej czynności zostanie wywołana twoja trasa logowania i tam możesz zadbać o zwrócenie błędu lub ważnego tokena.
Mam nadzieję, że to pomoże komuś. A jeśli popełniłem jakieś błędy lub coś zapomniałem, daj mi znać.
super, dzięki za komentarz, jak rozwiązać it :) – robertklep
Paszportowa [BasicStrategy] (http://passportjs.org/guide/basic-digest/) lub DigestStrategy to dwie inne opcje. Jednak nie wydaje się, aby istniała ogromna różnica między strategiami podstawowymi i lokalnymi, ponieważ obie sesje nie muszą działać - tylko lokalny prosi o przekierowania (dzięki czemu jest on mniej przyjazny dla interfejsu API). – funseiki
Hej @ cgiacomi mógłbyś podać przykład trasy, która sprawdza token? –