ฉันคิดออกแล้ว!
ก่อนอื่นคุณต้องใช้กลยุทธ์ที่ถูกต้อง ในกรณีของฉัน LocalStrategy และคุณต้องระบุตรรกะการตรวจสอบของคุณ ตัวอย่างเช่นลองใช้หนึ่งในหนังสือเดินทางท้องถิ่น
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)
จะดูแลการค้นหาผู้ใช้ของคุณและตรวจสอบว่ารหัสผ่านตรงกันหรือไม่ (เกินขอบเขตของคำถามและคำตอบของฉัน)
passport.js คาดว่าจะใช้งานได้หลายชิ้นส่วนหนึ่งคือคุณส่งคืนผู้ใช้ในกลยุทธ์ ฉันพยายามเปลี่ยนส่วนนั้นของโค้ดและนั่นผิด การติดต่อกลับคาดว่าfalse
หากการตรวจสอบความถูกต้องล้มเหลวและobject
(ผู้ใช้ที่ผ่านการตรวจสอบแล้ว) หากคุณทำสำเร็จ
ทีนี้ .... จะรวม JWT ได้อย่างไร?
ในเส้นทางการเข้าสู่ระบบของคุณคุณจะต้องจัดการกับการรับรองความถูกต้องสำเร็จหรือไม่สำเร็จ และที่นี่คุณต้องเพิ่มการสร้างโทเค็น JWT ชอบมาก:
(อย่าลืมปิดการใช้งานเซสชันมิฉะนั้นคุณจะต้องใช้ฟังก์ชัน serialize และ deserialize และคุณไม่จำเป็นต้องใช้สิ่งเหล่านี้หากคุณยังไม่คงเซสชันซึ่งคุณจะไม่อยู่หากคุณใช้โทเค็นรับรองความถูกต้อง)
จากตัวอย่างหนังสือเดินทาง - ท้องถิ่น: (โดยเพิ่มโทเค็น 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 เสมอ) ข้อมูลโค้ดแรกด้านบนจะพยายามค้นหาผู้ใช้ตามชื่อผู้ใช้ที่คุณระบุจากนั้นตรวจสอบว่ารหัสผ่านตรงกัน (แน่นอนคุณจะต้อง เปลี่ยนตามความต้องการของคุณ)
หลังจากนั้นจะมีการเรียกเส้นทางการเข้าสู่ระบบของคุณและคุณสามารถดูแลการส่งคืนข้อผิดพลาดหรือโทเค็นที่ถูกต้องได้
หวังว่านี่จะช่วยใครบางคนได้ และหากฉันทำผิดพลาดหรือลืมบางสิ่งบางอย่างโปรดแจ้งให้เราทราบ