node.js - NodeJS Express Passport - req.user 未定义
问题描述
我正在使用 express+passport 在小型应用程序中测试身份验证,并尝试在没有会话的情况下进行。因此用户必须为每个操作提供用户名和密码。在下一个中间件 request.user 中授权 (passport.authenticate()) 后未定义,但 passport faq 说“如果身份验证成功,将调用下一个处理程序并将 req.user 属性设置为经过身份验证的用户。” 这里有什么问题?
清单
const express = require('express');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const app = express();
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));
passport.use('login',
new LocalStrategy({
session: false,
passReqToCallback: true
},
(req, username, password, done) => {
// passport.use(new LocalStrategy((username, password, done) => {
console.log(' In passport.use(new LocalStrategy...)');
console.log('req.body = ', req.body);
console.log('req.user = ', req.user);
const user = {
username: username,
password: password,
};
if (user.username === 'Petr' && user.password === '123') {
console.log('Username and password OK');
return done(null, user);
}
return done(null, false, {
message: 'Wrong username or password!'
});
},
),
);
app.post('/', passport.authenticate('login', {
session: false,
successRedirect: '/success',
failureRedirect: '/failure',
}));
app.use('/', (req, res, next) => {
console.log(' In app.use /');
console.log('req.body = ', req.body);
console.log('req.user = ', req.user); //HERE req.user is undefined!!!
next();
});
app.use('/', (req, res, next) => {
console.log('Request at /');
next();
});
app.use('/success', (req, res, next) => {
res.send('success');
next();
});
app.use('/failure', (req, res, next) => {
res.send('failure');
next();
});
app.listen(8000, () => {
console.log('Server "Test" starts at port 8000');
});
解决方案
您是否为您的应用设置了会话状态?你必须像这样添加它......
app.use(session({ secret: 'anything' }));
app.use(passport.initialize());
app.use(passport.session());
推荐阅读
- testing - 我正在使用 Testcafe : Settings.json 文件。节点模块中显示的错误
- python - FFMPEG + Python - 在 ffmpeg 端跳过不需要的帧
- python - 当它的值可以在另一列中时如何处理空行?
- php - PHP 无法将验证码字符串与用户输入的字符串进行比较
- python-3.x - PYGAME - 外部类的 Blit 不起作用
- actions-on-google - 设备名称显示为“??”
- php - 如何根据登录用户在 php 中从 MySQL 获取特定用户数据
- python - 蟒蛇,基维。如何禁用/启用按钮?
- javascript - 材质ui输入类型号重置错误值
- javascript - 如何在excel中导出图表?