想问一个关于 koa2 和 koa-passport 相关的问题

2018-12-17 20:26:44 +08:00
 philsky28

我设立的本地验证策略已经成功的调用了 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

3693 次点击
所在节点    Node.js
7 条回复
philsky28
2018-12-17 22:38:10 +08:00
没人吗。。。。
SakuraKuma
2018-12-17 22:40:32 +08:00
koa-passport 版本?
philsky28
2018-12-17 23:26:37 +08:00
已经解决,中间件调用顺序错了
```
app.use(passport.initialize())
app.use(passport.session())
```
应该放在 router 前面
yimaneilicj
2018-12-18 10:49:26 +08:00
我是看见你的头像点进来的。
kepenj
2018-12-18 13:10:26 +08:00
我是看见你的头像点进来的。
LeoEatle
2018-12-24 01:09:23 +08:00
其实 ctx 少了什么东西,第一想的不就该是有没有调用中间件么...
RanTuki
2019-11-24 14:01:10 +08:00
可以请教一个问题吗?done(null, false, '密码错误')这里的处理,是在 passport.authenticate 里面可以得到密码错误这个信息吗?一直搞不懂 passport 里的 done()处理之后,要在哪里能拿到它的处理.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/518390

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX