关于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是一个处理注册,登陆的标准化接口,这个接口需要提供不同的策略
00
相似问题