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 相关文章推荐
让网页根据不同IE版本显示不同的内容
Feb 08 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
Apr 05 Javascript
javascript中的undefined和not defined区别示例介绍
Feb 26 Javascript
在JavaScript中构建ArrayList示例代码
Sep 17 Javascript
JavaScript中的Repaint和Reflow用法详解
Jul 27 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
Sep 14 Javascript
JS实现适合于后台使用的动画折叠菜单效果
Sep 21 Javascript
JS实现图片高亮展示效果实例
Nov 24 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
Jun 07 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 Javascript
vue使用axios时关于this的指向问题详解
Dec 22 Javascript
JavaScript引用类型Function实例详解
Aug 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错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
2015/11/18 PHP
JQuery的html(data)方法与<script>脚本块的解决方法
2010/03/09 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
Angular 5.x 学习笔记之Router(路由)应用
2018/04/08 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
js实现筛选功能
2020/11/24 Javascript
[08:40]Navi Vs Newbee
2018/06/07 DOTA
python获取本机外网ip的方法
2015/04/15 Python
python中的闭包函数
2018/02/09 Python
python爬虫爬取网页表格数据
2018/03/07 Python
python实战教程之自动扫雷
2018/07/13 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
python 模拟登陆163邮箱
2020/12/15 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
医学生自荐信范文
2013/12/03 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
学校与家长安全责任书
2014/07/23 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
成人成长感言如何写?
2019/08/16 职场文书
python实现自动化群控的步骤
2021/04/11 Python
小程序实现筛子抽奖
2021/05/26 Javascript