关于Passport的执行流程

来源:8-9 注册&登录(2)

Rexk

2019-02-19

关于passport

看了视频,也看了一些文档,但是对passportjs还是有点头晕,搞不懂他们工作流程顺序是什么
图片描述
暂时的理解是 先新建一个策略 课程里的是 local 策略

passport.use(new LocalStrategy(async function(username,password,done){
这里函数的username和password是哪里来的?? 是我们post请求然后传到路由,路由通过ctx.body获取,然后路由里调用这个策略传递过来的吗?
  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,'用户不存在')
  }
}))

配置用户signin接口,这里就会去调用我们上面设置的local策略

不知道这样理解正不正确:
下面代码中Passport.authenticate(…)的第一个参数是指定我们要使用的策略,这里是local
第二个参数是回调函数,是调用local策略(即上面的代码)完成之后执行,
函数的err和uesr是上面的策略执行done()传递过来的吗?
info是上面done函数的第三个参数吗,例如’密码错误,‘用户不存在’

router.post('/signin', async (ctx, next) => {
  return Passport.authenticate('local', function(err, user, info, status) {
    if (err) {
      ...
    } else {
      if (user) {
       ...
        return ctx.login(user)
      } else {
       ...
      }
    }
  })(ctx, next)
})

我们通过 axios 进行请求,下面的 username和password就是会传递到最上面的local策略那里吗?

login: function () {
      let self=this;
      self.$axios.post('/users/signin',{
        username:window.encodeURIComponent(self.username),
        password:CryptoJS.MD5(self.password).toString()
      }).then(({status,data})=>{
        if(status===200){
          if(data&&data.code===0){
            location.href='/'
          }else{
            self.error=data.msg
          }
        }else{
          self.error=`服务器出错`
        }
      })
    }
写回答

1回答

快乐动起来呀

2019-02-20

你可以这样理解passport是一个处理注册,登陆的标准化接口,这个接口需要提供不同的策略

0
0

Vue全家桶+SSR+Koa2全栈开发美团网

整合大前端8项技术,全面晋级全栈工程师,毕设/面试作品

2445 学习 · 1638 问题

查看课程