首页 > 解决方案 > 在 Node.js 中使用护照给出错误 req.data 未定义

问题描述

护照.js

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var user = require('../modal/admin');

exports.passport = (passport) => {
passport.use(new LocalStrategy({
    usernameField: 'username',
    passwordField: 'password'
},
    (username, password, done, req) => {
        console.log(req)
        user.findOne(({ username: username }),  async (err, user) => {
        if (err) { return done(err); }
        if (!user) { return done(null, false); }
        const cpassword = await bcrypt.compare(password, user.password);
        if (!cpassword) { return done(null, false); }
        const token = jwt.sign(
            {
                id:user.id,
                username:user.username
            },
            "shubham"            
        );
        adminRecords = {
            token:token
        }
        req.data = adminRecords  ====>>>> Error here
        console.log(adminRecords)
        return done(null, user, adminRecords);
        });
    }
 ))
};
passport.serializeUser(function (user, done) {
 done(null, user)
})

passport.deserializeUser(function (id, done) {
 user.find(id, function (err, user) {
    done(err, user)       
 });
}); 

路由.js

router.post('/login', passport.authenticate('local'));

它给出错误 req.data 未定义。我正在使用护照本地策略,并希望在 req.data 中返回 jwt 令牌。它没有正确使用 req 参数。

标签: javascriptnode.jsexpresspassport.js

解决方案


回调函数只有 3 个参数

passport.use(new LocalStrategy({
    usernameField: 'username',
    passwordField: 'password'
},
    (username, password, done, req) => { // callback function have only 3 params 
// Additional codes

解决方案在您进行身份验证时尝试使用中间件

app.use(request, response, next) => { passport.authenticate('local', (err, token, info) => {
 if (token) {
 request.login(token, () => { // Do your logic });
 } else { } 
})(request, response, next); });

推荐阅读