koa2使用koa-passport实现token的验证

在koa项目中安装koa-passport

yarn add koa-passport -D

在app.js入口文件引入和使用

// token验证
const passport = require('koa-passport');

// token验证
app.use(passport.initialize());
app.use(passport.session());

// 回调到指定config文件 passport.js中
require('./config/passport')(passport);

在 config\passport.js 文件中进行token验证逻辑处理

const JwtStrategy = require('passport-jwt').Strategy;
const JwtExtractJwt = require('passport-jwt').ExtractJwt;
const keys = require('./keys');
const options = {};
options.jwtFromRequest = JwtExtractJwt.fromAuthHeaderAsBearerToken();
options.secretOrKey = keys.secretOrKey;
const mongoose = require('mongoose');
const User = mongoose.model('users');

module.exports = (passport) => {
  passport.use(
    new JwtStrategy(options, async (jwt_payload, done) => {
      const user = await User.findById(jwt_payload.id);
      //查询当前用户是否有权限
      if (user) {
        return done(null, user);
      } else {
        return done(null, false);
      }
    })
  );
};

在文件routes\login.js中写一个私有接口 进行测试

// token验证
router.get(
  '/currentToken',
  passport.authenticate('jwt', { session: false }),
  async (ctx) => {
    const { id, username, avatar, email } = ctx.state.user;
    ctx.body = {
      id,
      username,
      avatar,
      email,
    };
  }
);

在postman上调用试一下 (本地服务器,自己替换成自己的服务器即可)
http://localhost:5000/users/currentToken
header设置一下 Authorization:

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYxODVmZmQ1ODM5YmIzYjQ0ODhhMDQyMiIsIm5hbWUiOiI2NDlmMzE4OGRkYzc5NmVmNDA3OTA2MDFhNjA0YWFlMCIsImF2YXRhciI6IjI1ZDU1YWQyODNhYTQwMGFmNDY0Yzc2ZDcxM2MwN2FkIiwiaWF0IjoxNjM2MTgxMzc3LCJleHAiOjE2MzYxODQ5Nzd9.cikFwOBNWQQ_cID70RqSngDLTbwZoHQqHcjyar6cFQE

测试接口返回 Unauthorized 代表当前的用户没有权限或者token不对

反之,返回用户基本信息如下,代表token验证通过

{
    "id": "6185ffd5839bb3b4488a0422",
    "username": "649f3188ddc796ef40790601a604aae0",
    “avatar”:"",
    "email":"123232@aliyun.com"
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐梦想之路_随笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值