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 相关文章推荐
javascript基本语法分析说明
Jun 15 Javascript
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
Jquery Ajax xmlhttp请求成功问题
Feb 04 Javascript
jQuery层级选择器用法分析
Feb 10 Javascript
js数组如何添加json数据及js数组与json的区别
Oct 27 Javascript
JS中多步骤多分步的StepJump组件实例详解
Apr 01 Javascript
jQuery hover事件简单实现同时绑定2个方法
Jun 07 Javascript
BootStrop前端框架入门教程详解
Dec 25 Javascript
JS中双击和单击事件冲突的解决方法
Apr 09 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
Oct 30 Javascript
Vue组件化开发之通用型弹出框的实现
Feb 28 Javascript
VsCode里的Vue模板的实现
Aug 12 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制作静态网站的模板框架(四)
2006/10/09 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
js编写简易的计算器
2020/07/29 Javascript
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python设置环境变量的作用和实例
2019/07/09 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
荷兰手表网站:Watch2Day
2018/07/02 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
《十六年前的回忆》教学反思
2014/02/14 职场文书
企业节能减排实施方案
2014/03/19 职场文书
酒店管理求职信范文
2014/04/06 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js