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


Posted in Javascript onFebruary 20, 2020

安装

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

Javascript 相关文章推荐
JavaScript Chart 插件整理
Jun 18 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
Jun 25 Javascript
jquery五角星评分插件示例分享
Feb 21 Javascript
详解Jquery实现ready和bind事件
Apr 14 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
Apr 18 Javascript
jQuery实现打开页面渐现效果示例
Jul 27 Javascript
Bootstrap模态框调用功能实现方法
Sep 19 Javascript
js的三种继承方式详解
Jan 21 Javascript
javascript 中null和undefined区分和比较
Apr 19 Javascript
详解webpack-dev-server的简单使用
Apr 02 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
Jan 24 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
Jul 18 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
Feb 20 #Javascript
一篇文章带你浅入webpack的DLL优化打包
Feb 20 #Javascript
浅析JS中NEW的实现原理及重写
Feb 20 #Javascript
JS通过识别id、value值对checkbox设置选中状态
Feb 19 #Javascript
Javascript实现html转pdf高清版(提高分辨率)
Feb 19 #Javascript
Vue组件模板的几种书写形式(3种)
Feb 19 #Javascript
详解Vue 单文件组件的三种写法
Feb 19 #Javascript
You might like
PHP 反射机制实现动态代理的代码
2008/10/22 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
浅谈python装饰器探究与参数的领取
2017/12/01 Python
Python检查ping终端的方法
2019/01/26 Python
学习和使用python的13个理由
2019/07/30 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
国家助学金获奖感言
2014/01/31 职场文书
小学生环保倡议书
2014/05/15 职场文书
国际商务专业求职信
2014/07/15 职场文书
最新离婚协议书范本
2014/08/19 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
python自动化之如何利用allure生成测试报告
2021/05/02 Python
详解Redis瘦身指南
2021/05/26 Redis
python scrapy简单模拟登录的代码分析
2021/07/21 Python