
我设立的本地验证策略已经成功的调用了 done 方法,但是返回到 assport.authenticate()后,ctx 中没有 login 这个函数,我比较了下别人的 demo 也没什么不一致的地方,求教!
// User.js router.post('/login', async (ctx, next) => { return passport.authenticate('local', function(err, user, info, status) { if (err) { ctx.body = { code: -1, msg: err } } else { //拿到登陆用户 if (user) { ctx.body = { code: 0, msg: '登陆成功', user } return ctx.login(user) } else { ctx.body = { code: 1, msg: info } } } })(ctx,next) }) // ./util/passport.js const passport = require('koa-passport') const localStrategy = require('passport-local') const UserModel = require('../db/models/user') passport.use( new localStrategy(async (username, password, done) => { let where = { username } let result = await UserModel.findOne(where) if (result != null) { if (result.password === password) { return done(null, result) } else { return done(null, false, '密码错误') } } else { return done(null, false, '用户不存在') } }) ) passport.serializeUser((user, done) => { done(null, user) }) passport.deserializeUser((user, done) => { return done(null, user) }) module.exports = passport 1 philsky28 OP 没人吗。。。。 |
2 SakuraKuma 2018-12-17 22:40:32 +08:00 koa-passport 版本? |
3 philsky28 OP 已经解决,中间件调用顺序错了 ``` app.use(passport.initialize()) app.use(passport.session()) ``` 应该放在 router 前面 |
4 yimaneilicj 2018-12-18 10:49:26 +08:00 我是看见你的头像点进来的。 |
5 kepenj 2018-12-18 13:10:26 +08:00 我是看见你的头像点进来的。 |
6 LeoEatle 2018-12-24 01:09:23 +08:00 其实 ctx 少了什么东西,第一想的不就该是有没有调用中间件么... |
7 RanTuki 2019-11-24 14:01:10 +08:00 可以请教一个问题吗?done(null, false, '密码错误')这里的处理,是在 passport.authenticate 里面可以得到密码错误这个信息吗?一直搞不懂 passport 里的 done()处理之后,要在哪里能拿到它的处理. |