首页 > 其他分享 >使用jwt鉴权(jsonwebtoken)

使用jwt鉴权(jsonwebtoken)

时间:2022-11-09 09:11:08浏览次数:38  
标签:const jwt await ctx api jsonwebtoken 鉴权

1. 下载jsonwebtoken

npm i -S jsonwebtoken

2. 引用

const jwt = require('jsonwebtoken');

3. 需要设置秘钥

const secretKey = '3.14159263528542852651268541';

4. 设置jwt

const token = await jsonwebtoken.sign(data.dataValues, secretKey, { expiresIn: 60 * 60 * 4 });

5. 验证

await jwt.verify(ctx.headers.authorization, secretKey);

示例

const router = require('koa-router')();
const jwt = require('jsonwebtoken'); // jwt生成token
const keys = '3.1415926.1314.520'
//定义允许直接访问的url
const allowpage = [
    '/api/register'/*注册*/, '/api/login'/*登录*/, '/api/user/sendemail'/*注册发送邮箱*/,
    '/api/sendemail'/* 发送邮箱 */, '/data'/*测试*/,
    '/api/changepass'/*修改密码*/
];
//路由监听,验证token
router.use(async (ctx, next) => {
    let url = ctx.originalUrl
    if (allowpage.indexOf(url) === -1) {
        const token = ctx.header.authorization;
        try {
            await jwt.verify(token, keys);
            await next();
        } catch {
            ctx.body = {
                code: 405,
                msg: '用户登录过期,请重新登录'
            }
        }
    } else {
        await next();
    }
});
module.exports = router;
//鉴权
// ./src/middlewares/auth.js
const jsonwebtoken = require('jsonwebtoken');
const secretKey = '3.14159263528542852651268541'

module.exports = () => {

    return async (ctx, next) => {
        try {
            let user = jsonwebtoken.verify(ctx.headers.authorization, secretKey);
            ctx.state.user = user;
        } catch (err) {
            ctx.throw(401, {
                code: -1,
                message: '你没有登录'
            });
        }
        await next();
    };
}

 

标签:const,jwt,await,ctx,api,jsonwebtoken,鉴权
From: https://www.cnblogs.com/Lmyong/p/16872429.html

相关文章

  • JWT笔记
    什么是JWT全程为“JsonWebToken”,其本质就是一个字符串,是将用户信息保存到一个Json字符串中,然后进行编码后得到token字符串,并且这个token带有签名信息,接收后可以校验......
  • JWT自学
    一:导入配置文件<!--JWT--><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><ver......
  • ctfshow JWT总结
    一、基础知识:介绍:JSONWebToken(JWT)是用来进行跨域身份验证的一种方案。构成:eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoidXNlciIsImlhdCI6MTY2NzgxMDA1MX0.bsJ......
  • JWT安全性剖析
    JWT基础概念详解简介JWT(JSONWebToken)是目前最流行的跨域认证解决方案,是一种基于Token的认证授权机制。从JWT的全称可以看出,JWT本身也是Token,一种规范化之后......
  • 鉴权kafka创建新用户和给topic赋权限等相关Acl命令失效问题定位
    问题现象背景:收到客户反馈使用kafka鉴权sdk并填入平台新建的用户组和topic相关参数,消费报鉴权失败。   排查过程:1、首先是怀疑客户使用的入参或用法有误,因此向客......
  • 使用jwt,redis,实现登录
    jwt是无状态的,不需要服务端存储登录用户信息,一次性生成token后,除非过期,不然是都可以用的。但是这样就产生了token续期、用户注销等问题。token续期怎么解决呢?1、使用......
  • DRF访问控制(RBAC)、JWT认证
    目录RBACRBAC什么是RBACRBAC是基于角色的访问控制(Role-BasedAccessControl)在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极......
  • 关于jwt(token)储存在哪的方案
    第一种方案:(安全系数高的项目推荐这种)直接由服务端设置cookie到浏览器(客户端。jwttoken是储存在cookie的,请求是自动发送到服务器的,服务器直接获取就行,拿到验证且需要设置......
  • Kubernetes K8S之鉴权RBAC详解
    KubernetesK8S之鉴权RBAC详解https://www.cnblogs.com/zhanglianghhh/p/14128332.html KubernetesK8S之鉴权概述与RBAC详解 K8S认证与授权 认证「Authent......
  • go-gin集成jwt认证
    今天趁热打铁,把cookie/session/jwt集成go-gin框架的认证方式,一鼓作气全code一遍,lifeisshort,showyouthecode.示例目录结构:项目入口:packagemainimport( "gin......