我设立的本地验证策略已经成功的调用了 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()处理之后,要在哪里能拿到它的处理.
|