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 相关文章推荐
jQuery textarea的长度进行验证
May 06 Javascript
js导入导出excel(实例代码)
Nov 25 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
Dec 22 Javascript
JQuery标签页效果实例详解
Dec 24 Javascript
AngularJs  Creating Services详解及示例代码
Sep 02 Javascript
jQuery.form.js的使用详解
Jun 14 jQuery
Vue 拦截器对token过期处理方法
Jan 23 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
Feb 22 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
Aug 24 Javascript
解决Angular2 router.navigate刷新页面的问题
Aug 31 Javascript
VUE-cli3使用 svg-sprite-loader
Oct 20 Javascript
JS中call()和apply()的功能及用法实例分析
Jun 28 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
JAVA/JSP学习系列之七
2006/10/09 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
php输入流php://input使用浅析
2014/09/02 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
简单的js计算器实现
2016/10/26 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
探究python中open函数的使用
2016/03/01 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
Python面向对象封装操作案例详解
2019/12/31 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
校园摄影活动策划方案
2014/02/05 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
家长学校培训材料
2014/08/20 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
继续教育个人总结
2015/03/03 职场文书
环保主题班会教案
2015/08/13 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
2016年主题党日活动总结
2016/04/05 职场文书