在 Node.js 中使用护照给出错误 req.data undefined
Giving error req.data undefined using passport in Node.js
passport.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)
});
});
route.js
router.post('/login', passport.authenticate('local'));
给出错误 req.data 未定义。我正在使用护照本地策略并希望在 req.data 中 return jwt 令牌。它没有正确获取 req 参数。
回调函数只有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); });
passport.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)
});
});
route.js
router.post('/login', passport.authenticate('local'));
给出错误 req.data 未定义。我正在使用护照本地策略并希望在 req.data 中 return jwt 令牌。它没有正确获取 req 参数。
回调函数只有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); });