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 相关文章推荐
如何阻止复制剪切和粘贴事件为了表单内容的安全
May 23 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
Jan 09 Javascript
js 左右悬浮对联广告特效代码
Dec 12 Javascript
Angular 理解module和injector,即依赖注入
Sep 07 Javascript
AngularJS  双向数据绑定详解简单实例
Oct 20 Javascript
详解js中call与apply关键字的作用
Nov 21 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
Jul 07 Javascript
JS实现checkbox互斥(单选)功能示例
May 04 Javascript
vue实现一拉到底的滑动验证
Jul 25 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
Sep 20 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
Sep 28 Javascript
JavaScript监听一个DOM元素大小变化
Apr 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
zf框架的Filter过滤器使用示例
2014/03/13 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
python实现大学人员管理系统
2019/10/25 Python
详解Django配置优化方法
2019/11/18 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
药学专业大学生个人的自我评价
2013/11/04 职场文书
超市重阳节活动方案
2014/02/10 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
党支部换届选举方案
2014/05/08 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python
php解析非标准json、非规范json的方式实例
2022/05/10 PHP