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 相关文章推荐
些很实用且必用的小脚本代码
Jun 26 Javascript
js页面跳转常用的几种方式
Nov 25 Javascript
让table变成exls的示例代码
Mar 24 Javascript
Node.js静态文件服务器改进版
Jan 10 Javascript
JavaScript来实现打开链接页面的简单实例
Jun 02 Javascript
AngularJS基础 ng-value 指令简单示例
Aug 03 Javascript
javascript比较语义化版本号的实现代码
Sep 09 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 Javascript
基于JSON数据格式详解
Aug 31 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
Nov 09 jQuery
jquery radio 动态控制选中失效问题的解决方法
Feb 28 jQuery
解决vue 子组件修改父组件传来的props值报错问题
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计算页面执行时间的实现代码
2013/06/18 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
JavaScript 参考教程
2006/12/29 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
javascript常用的设计模式
2017/02/09 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
js实现随机点名小功能
2017/08/17 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
Python多线程学习资料
2012/12/19 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python实现的读写json文件功能示例
2018/06/05 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
《故乡》教学反思
2014/04/10 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
篮球比赛策划方案
2014/06/05 职场文书
欢迎领导检查标语
2014/06/27 职场文书
工作所在部门证明
2014/09/21 职场文书
大学军训口号大全
2015/12/24 职场文书
会议主持词通用版
2019/04/02 职场文书