koa-passport实现本地验证的方法示例
安装
yarnaddkoa-passportpassport-local
先看下passport.js登录策略,判断用户和密码
constpassport=require('koa-passport')
constLocalStrategy=require('passport-local').Strategy
constUser=require('../../dbs/models/users')
passport.use(newLocalStrategy((username,password,done)=>{
User.findOne({username},(err,user)=>{
if(err)returndone(err)
if(!user)returndone(null,false,{message:'用户不存在'})
if(user.password!==password)returndone(null,false,{message:'密码错误'})
returndone(null,user)
})
}))
passport.serializeUser((user,done)=>{
done(null,user)
})
passport.deserializeUser((user,done)=>{
done(null,user)
})
module.exports=passport
在入口中挂载passport
app.use(passport.initialize()) app.use(passport.session())
这时候passport策略配置完成
登录接口实现
router.post('/signin',asyncctx=>{
returnPassport.authenticate('local',(err,user,info,status)=>{
if(err){
ctx.body={
code:-1,
msg:err
}
}else{
if(user){
ctx.body={
code:0,
msg:'登录成功',
user
}
returnctx.login(user)
}else{
ctx.body={
code:1,
msg:info
}
}
}
})(ctx)
})
用户是否登录
router.get('/getUser',asyncctx=>{
if(ctx.isAuthenticated()){
const{username,email}=ctx.session.passport.user
ctx.body={
username,
email
}
}else{
ctx.body={
username:'',
email:''
}
}
})
用户退出
router.get('/exit',asyncctx=>{
awaitctx.logout()
if(!ctx.isAuthenticated()){
ctx.body={
code:0
}
}else{
ctx.body={
code:-1
}
}
})
分析
通过passport.serializeUser函数定义序列化操作,调用ctx.login()会触发序列化操作
通过passport.deserializeUser函数定义反序列化操作,在session中如果存在passport:{user:'Susan'}会触发反序列化操作
通过passport.use(newLocalStrategy('local',...))注册策略,调用passport.authenticate('local',...)调用策略
app.use(passport.initialize())会在ctx挂载以下方法
ctx.state.user认证用户
ctx.login(user)登录用户
ctx.logout()用户退出登录
ctx.isAuthenticated()判断是否认证
到此这篇关于koa-passport实现本地验证的方法示例的文章就介绍到这了,更多相关koa-passport本地验证内容请搜素毛票票以前的文章或下面相关文章,希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。