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 相关文章推荐
js中关于String对象的replace使用详解
May 24 Javascript
JavaScript实现表格排序方法
Jun 14 Javascript
js防止DIV布局滚动时闪动的解决方法
Oct 30 Javascript
ExpressJS入门实例
Jan 14 Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 Javascript
Node.js与Sails redis组件的使用教程
Feb 14 Javascript
webpack中的热刷新与热加载的区别
Apr 09 Javascript
js操作table中tr的顺序实现上移下移一行的效果
Nov 22 Javascript
js form表单input框限制20个字符,10个汉字代码实例
Apr 12 Javascript
JS实现烟花爆炸效果
Mar 10 Javascript
Node.js API详解之 repl模块用法实例分析
May 25 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 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代码DOS造成用光网络带宽
2011/03/01 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
python代码区分大小写吗
2020/06/17 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
清扬洗发水广告词
2014/03/14 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
实习协议书范本
2014/09/25 职场文书
2015年酒店工作总结
2015/04/28 职场文书
会议主持词开场白
2015/05/28 职场文书
集结号观后感
2015/06/08 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers