Я зрозумів це!
Перш за все потрібно реалізувати правильну стратегію. У моєму випадку 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), перший фрагмент коду спробує знайти користувача на основі вказаного вами імені користувача, а потім перевірте, чи відповідає пароль (звичайно, вам потрібно буде змініть це відповідно до ваших потреб).
Після цього буде викликано ваш маршрут входу, і ви зможете подбати про повернення помилки або дійсного маркера.
Сподіваюся, це комусь допоможе. І якщо я зробив якісь помилки або щось забув, дайте мені знати.