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 相关文章推荐
将string解析为json的几种方式小结
Nov 11 Javascript
JS创建自定义表格具体实现
Feb 11 Javascript
10分钟学会写Jquery插件实例教程
Sep 06 Javascript
多个jQuery版本共存的处理方案
Mar 17 Javascript
跟我学习javascript的prototype原型和原型链
Nov 18 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
Dec 03 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
Nov 30 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
Aug 03 Javascript
Windows安装Node.js报错:2503、2502的解决方法
Oct 25 Javascript
Vuex 快速入门(简单易懂)
Sep 20 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
May 07 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
Nov 10 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
PHP CodeBase:将时间显示为"刚刚""n分钟/小时前"的方法详解
2013/06/06 PHP
两个php日期控制类实例
2014/12/09 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
2016/08/31 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
[02:27]刀塔重生降临
2015/10/14 DOTA
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
自荐信如何“自荐”
2013/10/24 职场文书
高三语文教学反思
2014/01/15 职场文书
广告词串烧
2014/03/19 职场文书
小学三好学生事迹材料
2014/08/15 职场文书
计划生育证明格式范本
2014/09/12 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python