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 相关文章推荐
CSS常用网站布局实例
Apr 03 Javascript
JS input文本框禁用右键和复制粘贴功能的代码
Apr 15 Javascript
基于prototype扩展的JavaScript常用函数库
Nov 30 Javascript
写js时遇到的一些小问题
Dec 06 Javascript
javascript测试题练习代码
Oct 10 Javascript
JavaScript实现关键字高亮功能
Nov 12 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
Jun 05 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
Jan 30 Javascript
vue.js选中动态绑定的radio的指定项
Jun 02 Javascript
在vue项目中引入highcharts图表的方法(详解)
Mar 05 Javascript
微信小程序实现左滑动删除效果
Mar 30 Javascript
输入框跟随文字内容适配宽实现示例
Aug 14 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
Mysql的常用命令
2006/10/09 PHP
用PHP编程开发“虚拟域名”系统
2006/10/09 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
儿童python练习实例
2018/05/27 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
女装和独特珠宝:Sundance Catalog
2018/09/19 全球购物
资产评估专业学生的自我鉴定
2013/11/14 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
煤矿安全生产责任书
2014/04/15 职场文书
党员个人总结自评
2015/02/14 职场文书
Python自动化实战之接口请求的实现
2022/05/30 Python