欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

koa-passport实现本地验证的方法示例

程序员文章站 2024-01-01 17:11:10
安装yarn add koa-passport passport-local先看下passport.js登录策略,判断用户和密码const passport = require('koa-passpo...

安装

yarn add koa-passport passport-local

先看下passport.js登录策略,判断用户和密码

const passport = require('koa-passport')
const localstrategy = require('passport-local').strategy
const user = require('../../dbs/models/users')

passport.use(new localstrategy((username, password, done) => {
 user.findone({username}, (err, user) => {
  if (err) return done(err)
  if (!user) return done(null, false, {message: '用户不存在'})
  if (user.password !== password) return done(null, false, {message: '密码错误'})
  return done(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', async ctx => {
 return passport.authenticate('local', (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)
})

用户是否登录

router.get('/getuser', async ctx => {
 if (ctx.isauthenticated()){
  const {username, email} = ctx.session.passport.user
  ctx.body = {
   username,
   email
  }
 } else {
  ctx.body = {
   username: '',
   email: ''
  }
 }
})

用户退出

router.get('/exit', async ctx => {
 await ctx.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(new localstrategy('local', ...)) 注册策略,调用passport.authenticate('local',...)调用策略

app.use(passport.initialize()) 会在ctx挂载以下方法

  ctx.state.user 认证用户

  ctx.login(user) 登录用户

  ctx.logout() 用户退出登录

  ctx.isauthenticated() 判断是否认证

到此这篇关于koa-passport实现本地验证的方法示例的文章就介绍到这了,更多相关koa-passport 本地验证内容请搜素以前的文章或下面相关文章,希望大家以后多多支持!

上一篇:

下一篇: