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

 更新时间:2020年02月20日 10:04:26   作者:苏荷酒吧  
这篇文章主要介绍了koa-passport实现本地验证的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

安装

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 本地验证内容请搜素脚本之家以前的文章或下面相关文章,希望大家以后多多支持脚本之家!

相关文章

  • Node.js对MongoDB进行增删改查操作的实例代码

    Node.js对MongoDB进行增删改查操作的实例代码

    这篇文章主要介绍了Node.js对MongoDB进行增删改查操作 ,需要的朋友可以参考下
    2019-04-04
  • 发布一款npm包帮助理解npm的使用

    发布一款npm包帮助理解npm的使用

    这篇文章主要介绍了发布一款npm包帮助理解npm的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • node schedule实现定时任务的示例代码

    node schedule实现定时任务的示例代码

    实际工作中,可能会遇到定时清除某个文件夹内容,本文主要介绍了node schedule实现定时任务的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • 使用express搭建一个简单的查询服务器的方法

    使用express搭建一个简单的查询服务器的方法

    本篇文章主要介绍了使用express搭建一个简单的查询服务器的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 一文搞懂npm install 意义

    一文搞懂npm install 意义

    我们在安装依赖包的时候,不需要过多的去纠结是使用 -S 还是 -D 呢 ?随便安装到 dependencies 或者 devDependencies 里都行,反正 npm install的时候,都会安装dependencies 和 devDependencies依赖,今天通过本文学习npm install意义,感兴趣的朋友跟随小编一起看看吧
    2022-12-12
  • 简单了解node npm cnpm的具体使用方法

    简单了解node npm cnpm的具体使用方法

    这篇文章主要介绍了简单了解node npm cnpm的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • nodejs 图片预览和上传的示例代码

    nodejs 图片预览和上传的示例代码

    本篇文章主要介绍了nodejs 图片预览和上传的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 利用Node.js如何实现文件循环覆写

    利用Node.js如何实现文件循环覆写

    这篇文章主要给大家介绍了关于利用Node.js如何实现文件循环覆写的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • node + multer 实现文件上传过程

    node + multer 实现文件上传过程

    这篇文章主要介绍了node + multer 实现文件上传过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Nodejs 微信小程序消息推送的实现

    Nodejs 微信小程序消息推送的实现

    这篇文章主要介绍了Nodejs 微信小程序消息推送的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论