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 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
Dec 23 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
Feb 07 Javascript
Javascript原型链和原型的一个误区
Oct 22 Javascript
JavaScript修改浏览器tab标题小技巧
Jan 06 Javascript
js实现带圆角的多级下拉菜单效果
Aug 28 Javascript
原生JavaScript实现瀑布流布局
Jun 28 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
Apr 14 Javascript
用JS写的一个Ajax库(实例代码)
Aug 06 Javascript
vue组件挂载到全局方法的示例代码
Aug 02 Javascript
详解在React中跨组件分发状态的三种方法
Aug 09 Javascript
vue监听对象及对象属性问题
Aug 20 Javascript
微信小程序通过websocket实时语音识别的实现代码
Aug 19 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对文件进行加锁、解锁实例
2015/01/23 PHP
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
实例讲解python函数式编程
2014/06/09 Python
Python实现的二维码生成小软件
2014/07/11 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
python基础教程之while循环
2019/08/14 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
基于python实现操作redis及消息队列
2020/08/27 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
介绍一下Ruby的多线程处理
2013/02/01 面试题
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
公司综合部的成员自我评价分享
2013/11/05 职场文书
高中生学习的自我评价
2013/12/14 职场文书
优秀护士事迹材料
2014/12/25 职场文书
有关朝花夕拾的读书笔记
2015/06/29 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers