node.js - Express + PassportJS 无法读取 flash 消息
问题描述
我有我的 Express + Passport + Firebase 项目,我使用本地策略处理身份验证。由于我发现 Passport 会处理身份验证过程,所以我还发现它会接受 flash 消息作为done()
函数的第三个参数(在策略中)。但我不确定如何阅读它们:
我想我设置和读取 Flash 消息的流程是:
使用 NPM安装连接闪存。
导入后设置 Express 中间件:
import * as flash from 'connect-flash';
...
const app = express();
...
app.use(flash());
- 根据文档在 Express 路由中配置 Passport 身份验证:
// POST - /api/v1/admin/oauth/login
router.post(
'/login',
async (req: Request, res: Response) => { /* middleware function to validate input */ },
passport.authenticate('local', {
failureRedirect: '/api/v1/admin/oauth/login',
failureFlash: true
}),
async (req: Request, res: Response) => { /* function after success login */
);
done()
根据Passport 配置文档,在方法中包含 flash 消息:
import { Strategy as LocalStrategy } from 'passport-local';
import db from '../../config/database';
import * as bcrypt from 'bcryptjs';
export default new LocalStrategy({ usernameField: 'email' }, async (email, password, done) => {
const ref = db.collection('users').doc(email);
try {
const doc = await ref.get();
if (!doc.exists) {
return done(null, false, { error: 'Wrong email' });
}
const user = doc.data();
const match: boolean = await bcrypt.compare(password, user.password);
if (!match) {
return done(null, false, { error: 'Wrong password' });
}
user.id = doc.id;
delete user.password;
return done(null, user);
} catch(error) {
return done(error);
}
});
- 使用以下命令阅读 Flash 消息
req.flash('error')
:
// GET - /api/v1/admin/oauth/login
router.get('/login', (req: any, res: Response) => {
const result: IResult = {
message: '',
data: null,
ok: false
};
if (req.flash('error')) {
resultado.message = req.flash('error');
console.log(req.flash('error'));
}
return res.status(400).json(result);
});
我认为它在我的脑海中理论上是有效的,直到第 5 步,其中req.flash('error')
有一个空数组。我做错了什么?
解决方案
推荐阅读
- sql - 为什么我的圆形功能无法正常工作?
- javascript - JS await 在浏览器控制台中抛出错误
- java - 即使使用 cascade=CascadeType.ALL,POST/PUT/DELETE 方法也会出现约束休眠异常
- android - Android - Jetpack 撰写缺少的参考资料
- javascript - Javascript 计时器错误地结束
- typescript - TypeScript tls.TLSSocket() 抱怨缺少“socket”参数
- java - 在 SpringBoot-Neo4j 中保存用户时出错
- java - java从同一个包中的另一个类调用一个类
- html - 表格中的图像根本没有边框?如何?宽度和高度问题.. 在 css / html 中
- node.js - NPM 安装在 docker 容器中失败 - npm WARN tar ENOENT:没有这样的文件或目录