求助,egg-passport-local中没有调用deserializeUser
小白刚学egg,想完成本地持久化登陆: 用户名密码登陆 :登陆请求 -> 校验用户名密码(通过)->把用户_id 加密写入cookies->登陆成功 利用session登陆:获取资源请求->从cookies中获取用户_id(如果有),解密,验证(通过)->验证成功 以上我理解session登陆过程,使用egg-passport-local来完成
/app.js
'use strict';
module.exports = app => {
app.passport.verify(async (ctx, user) => {
console.log('verify');
console.log(user);
return user;
});
// 将用户信息序列化后存进 session 里面,一般需要精简,只保存个别字段
app.passport.serializeUser(async (ctx, user) => {
console.log('serializeUser');
});
// 反序列化后把用户信息从 session 中取出来,反查数据库拿到完整信息
app.passport.deserializeUser(async (ctx, user) => {
console.log('deserializeUser');
});
};
/app/router.js
module.exports = app => {
const { router, controller } = app;
router.get('/', controller.home.index);
const localStrategy = app.passport.authenticate('local');
router.post('/login', localStrategy);
};
=========
/app/controller/home.js
async index() {
if (await this.ctx.isAuthenticated()) {
this.ctx.body = 'hi, egg';
} else {
this.ctx.body = 'not Authenticated !';
}
}
用户名密码登陆是成功的,登陆完毕后调用serializeUser, 但是想请求需要登陆资源,为什么没有调用deserializeUser 还是我流程弄错?Stackoverflow同类问题 另外为什么egg-passport-local issues区被关闭了
1 回复
已解决,这里有个TypeScript example,经过测试, serializeUser/deserializeUser需要return 参数,不return 不会打印console 貌似是基础的东西,有大佬解释下原理吗?