javascript - 在 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 参数。
解决方案
回调函数只有 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); });
推荐阅读
- .net - 5秒查看部署状态
- firebase - Flutter Firebase Auth:如何在 Flutter Drawer 中显示用户电子邮件和姓名
- c# - C# WPF - 创建自定义控件。不确定如何正确对齐文本
- vuejs2 - 这个来自 bootstrap vue 文档的示例是否错误/过时?
- python - 如何使用 Python 使用 Regex 编译括号中的数字列表
- split - Flutter:使用 TapGestureRecognizer 更改 TextSpan 的文本样式
- excel - 如何创建宏以有条件地逐行打印单个单元格内容
- docker - 如何在 Docker 中通过 ASP.NET Core 2.2 应用程序支持生产环境
- c# - 如何从调用该 PowerShell 脚本的 C# 代码中回答 Read-Host?
- powerbi - 尝试根据过滤器和 ALLEXCEPT 计算每日百分比