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 拾色器插件发布-jquery.icolor.js
Oct 20 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
Jan 25 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
May 06 Javascript
jquery简单实现鼠标经过导航条改变背景图
Dec 17 Javascript
原生JavaScript实现合并多个数组示例
Sep 21 Javascript
jQuery实现简单的DIV拖动效果
Feb 19 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
Jul 17 jQuery
js 概率计算(简单版)
Sep 12 Javascript
浅谈Vue内置component组件的应用场景
Mar 27 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
Jun 07 Javascript
详解如何从零开始搭建Express+Vue开发环境
Jul 17 Javascript
Angular之jwt令牌身份验证的实现
Feb 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
浅析SVN常见问题及解决方法
2013/06/21 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
PHP安全下载文件的方法
2016/04/07 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
2017/03/21 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
python+mysql实现简单的web程序
2014/09/11 Python
Python探索之URL Dispatcher实例详解
2017/10/28 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
一道python走迷宫算法题
2018/01/22 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
python简单的三元一次方程求解实例
2020/04/02 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
SQL面试题
2013/04/30 面试题
区域销售经理岗位职责
2013/12/10 职场文书
关于感谢信的范文
2015/01/23 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
Android中的Launch Mode详情
2022/06/05 Java/Android