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 相关文章推荐
基于jquery的二级联动菜单实现代码
Apr 25 Javascript
jQuery对象和Javascript对象之间转换的实例代码
Mar 20 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
Apr 12 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
Oct 18 Javascript
node.js不得不说的12点内容
Jul 14 Javascript
javascript复制粘贴与clipboardData的使用
Oct 16 Javascript
JavaScript 事件绑定及深入
Apr 13 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
Mar 01 Javascript
javascript验证手机号和实现星号(*)代替实例
Aug 16 Javascript
详解Node.js中exports和module.exports的区别
Apr 19 Javascript
vue实现登录后页面跳转到之前页面
Jan 07 Javascript
微信小程序实现左侧滑栏过程解析
Aug 26 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中实现Javascript的escape()函数代码
2010/08/08 PHP
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
使用JS动态显示文本
2017/09/09 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
Python subprocess模块详细解读
2018/01/29 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
艺术专业大学生自我评价
2013/09/22 职场文书
学校介绍信范文
2014/01/14 职场文书
大学生就业意向书范文
2014/04/01 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
2019年入党思想汇报
2019/03/25 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书