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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。