Tôi đã hiểu rồi!
Trước hết bạn cần thực hiện chiến lược chính xác. Trong trường hợp của tôi là LocalStrategy và bạn cần cung cấp logic xác thực của mình. Ví dụ vì lợi ích, hãy sử dụng một trong hộ chiếu-địa phương.
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);
});
}
));
cuộc gọi lại xác minh mà bạn cung cấp function(username, password, done)
sẽ thực hiện việc tìm kiếm người dùng của bạn và kiểm tra xem mật khẩu có khớp không (ngoài phạm vi câu hỏi và câu trả lời của tôi)
passport.js mong đợi một số phần để nó hoạt động, một là bạn trả lại người dùng trong chiến lược. Tôi đã cố gắng thay đổi phần đó của mã, và điều đó đã sai. Cuộc gọi lại dự kiến false
nếu xác thực không thành công và object
(người dùng đã xác thực) nếu bạn thành công.
Bây giờ .... làm thế nào để tích hợp JWT?
Trong lộ trình đăng nhập, bạn sẽ phải xử lý xác thực thành công hoặc không thành công. Và chính ở đây bạn cần thêm phần tạo mã thông báo JWT. Như vậy:
(hãy nhớ vô hiệu hóa phiên, nếu không bạn sẽ phải triển khai các chức năng tuần tự hóa và giải mã hóa. Và bạn không cần các chức năng này nếu bạn không duy trì phiên, bạn không cần nếu bạn đang sử dụng xác thực dựa trên mã thông báo)
Từ ví dụ hộ chiếu-địa phương: (có thêm mã thông báo 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);
});
Và đó là nó! Bây giờ khi bạn gọi / đăng nhập và ĐĂNG tên người dùng và mật khẩu (phải luôn qua SSL) đoạn mã đầu tiên ở trên sẽ cố gắng tìm người dùng dựa trên tên người dùng bạn đã cung cấp và sau đó kiểm tra xem mật khẩu có khớp không (Tất nhiên bạn sẽ cần thay đổi cho phù hợp với nhu cầu của bạn).
Sau đó, tuyến đường đăng nhập của bạn sẽ được gọi và ở đó bạn có thể xử lý việc trả lại lỗi hoặc mã thông báo hợp lệ.
Hy vọng điều này sẽ giúp một ai đó. Và nếu tôi có bất kỳ sai lầm hoặc quên điều gì đó, hãy cho tôi biết.