Я зрозумів це!
Перш за все потрібно реалізувати правильну стратегію. У моєму випадку LocalStrategy, і вам потрібно надати свою логіку перевірки. Для прикладу, скористаємось тим, що вказано в паспорті-local.
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);
});
}
));
підтверджений зворотний дзвінок, який ви надаєте function(username, password, done)
, подбає про пошук вашого користувача та перевірку відповідності пароля (поза рамками питання та моєї відповіді)
Паспорт.js очікує декількох частин для його роботи, одна - повернення користувача в стратегію. Я намагався змінити цю частину коду, і це було неправильно. Зворотний дзвінок очікує, false
якщо перевірка не вдасться, а object
(перевіреного користувача) - якщо ви успішно виконаєте.
Тепер .... як інтегрувати JWT?
У своєму маршруті входу вам доведеться обробити успішну автентифікацію або невдалу. І саме тут вам потрібно додати створення маркера JWT. Подобається так:
(не забудьте відключити сеанс, інакше вам доведеться реалізувати функції серіалізації та десеріалізації. І вони вам не потрібні, якщо ви не продовжуєте сеанс, а це не так, якщо ви використовуєте аутентифікацію на основі маркера)
З прикладів для місцевих паспортів: (з доданим маркером JWT)
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' });
}
var token = jwt.encode({ username: 'somedata'}, tokenSecret);
res.json({ token : token });
})(req, res, next);
});
І це все! Тепер, коли ви телефонуєте / вхід та ім'я користувача та пароль POST (які завжди повинні бути над SSL), перший фрагмент коду спробує знайти користувача на основі вказаного вами імені користувача, а потім перевірте, чи відповідає пароль (звичайно, вам потрібно буде змініть це відповідно до ваших потреб).
Після цього буде викликано ваш маршрут входу, і ви зможете подбати про повернення помилки або дійсного маркера.
Сподіваюся, це комусь допоможе. І якщо я зробив якісь помилки або щось забув, дайте мені знати.