Saya menemukan jawabannya!
Pertama-tama Anda perlu menerapkan strategi yang benar. Dalam kasus saya, LocalStrategy, dan Anda perlu memberikan logika validasi Anda. Sebagai contoh, mari gunakan yang di paspor-lokal.
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);
});
}
));
verifikasi panggilan kembali yang Anda berikan function(username, password, done)
akan mengurus menemukan pengguna Anda dan memeriksa apakah kata sandi cocok (di luar cakupan pertanyaan dan jawaban saya)
passport.js mengharapkan beberapa bagian agar berfungsi, salah satunya adalah Anda mengembalikan pengguna dalam strategi. Saya mencoba mengubah bagian kode itu, dan itu salah. Callback mengharapkan false
jika validasi gagal danobject
(pengguna yang divalidasi) jika Anda berhasil.
Sekarang .... bagaimana cara mengintegrasikan JWT?
Dalam rute login Anda, Anda harus menangani autentikasi yang berhasil atau yang tidak berhasil. Dan di sinilah Anda perlu menambahkan pembuatan token JWT. Seperti:
(ingat untuk menonaktifkan sesi, jika tidak Anda harus mengimplementasikan fungsi serialize dan deserialize. Dan Anda tidak memerlukannya jika Anda tidak mempertahankan sesi, yang tidak Anda lakukan jika menggunakan token berbasis auth)
Dari contoh paspor-lokal: (dengan token JWT ditambahkan)
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);
});
Dan itu dia! Sekarang ketika Anda memanggil / masuk dan POST nama pengguna dan kata sandi (yang harus selalu melalui SSL) potongan kode pertama di atas akan mencoba menemukan pengguna berdasarkan nama pengguna yang Anda berikan dan kemudian memeriksa apakah kata sandi cocok (Tentu saja Anda perlu ubah itu agar sesuai dengan kebutuhan Anda).
Setelah itu, rute masuk Anda akan dipanggil dan di sana Anda dapat menangani pengembalian kesalahan atau token yang valid.
Semoga ini bisa membantu seseorang. Dan jika saya telah membuat kesalahan atau lupa sesuatu beri tahu saya.