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 AJAX提交中文乱码的解决方案
Jul 02 Javascript
js表单中选择框值的获取及表单的序列化
Dec 17 Javascript
javascript中的 object 和 function小结
Aug 14 Javascript
Node.js中使用jQuery的做法
Aug 17 Javascript
原生JS:Date对象全面解析
Sep 06 Javascript
Javascript自定义事件详解
Jan 13 Javascript
vue.js+element-ui动态配置菜单的实例
Sep 07 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
Oct 31 Javascript
Vue项目引进ElementUI组件的方法
Nov 11 Javascript
JavaScript实现简单轮播图效果
Dec 01 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
Dec 13 Javascript
详解nginx配置vue h5 history去除#号
Nov 09 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 文件夹删除、php清除缓存程序
2009/08/25 PHP
使用swoole扩展php websocket示例
2014/02/13 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
Cookie跨域问题解决方案代码示例
2020/11/24 PHP
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
党校学习心得体会范文
2014/09/09 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript