【Koa】什么是passport权限认证,它该如何配置呢?

什么是passport权限认证,它该如何配置呢?

后端系统避免不了要做权限认证,比如本地用户登录,第三方登录

权限认证的思路也极其简单,不外乎就是登录,登出,路由守护三部分

前面的系统中我们通过koa-session做了个简单的登陆权限认证。但是这中写法有很大的局限性,不易于扩展,在koa中有个passport可以帮我们解决系统开发过程中的权认证问题

Passport是一个Node.js中间件,它提供了易于实现的各种不同的请求身份验证策略。默认情况下,它将用户对象存储在会话中

passport目前有很多已经写好的登录策略,比如github登录,微信登录,Facebook登录,google等等

官网 http://passportjs.org/docs/

安装包:
npm  i  koa-passport –s
安装本地策略:
npm i  passport-local -s

本地认证

配置koa-passport:

在这里插入图片描述

配置koa-passport:序列化和反序列化

在这里插入图片描述

在app.js中应用koa-passport配置:

在这里插入图片描述
app.use(passport.initialize()) 会在请求周期ctx对象挂载以下方法与属性

  • ctx.state.user 认证用户
  • ctx.login(user) 登录用户(序列化用户)
  • ctx.isAuthenticated() 判断是否认证
  • ctx.logout() 登出
修改登陆、登出等业务逻辑

在这里插入图片描述

通过passport增加jwt策略对跨域请求的token进行验证
首先安装依赖:
npm install --save koa-passport (已安装的忽略)
npm install --save passport-jwt 
npm install --save jsonwebtoken
流程:
  • 当用户登录时,后端会创建签名令牌并将其作为响应返回
  • 客户端在本地保存令牌(通常在localStorage中),并在每个需要身份验证的后续请求中将其发回
  • 所有需要身份验证的请求都会通过中间件检查提供的令牌,并且只有在验证令牌时才允许请求
登陆时生成token:

在这里插入图片描述
在这里插入图片描述

在passport.js中添加jwt认证策略

在这里插入图片描述
登陆后解析token:passport.authenticate(‘jwt’, { session: false })

完整代码如下:

目录

在这里插入图片描述

// passport.js

var LocalStrategy = require('passport-local').Strategy
const userDao = require('../service/user_dao')
const md5 = require('../util/md5solt')

const passport = require('koa-passport')
const JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;
const opts = {
   
   
    jwtFromRequest:ExtractJwt.fromAuthHeaderAsBearerToken(),
    secretOrKey:"gamercode"// 数字签名,与生成token时的一样,不能告诉用户
}
//jwt验证
passport.use(new JwtStrategy(opts,async (jwt_payload,done)=>{
   
   
    //jwt_payload 返回的是登录时返回的数据 即payload
    console.log(jwt_payload)
    const user=await userDao.getUserInfo(jwt_payload.user_id);
    if(user){
   
   
        user.password =''
        user.solt=''
        done(null,user);
    }else{
   
   
        done(null,false);
    }
}))

//本地验
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值