编程崽

登录

一叶在编程苦海沉沦的扁舟之上,我是那只激情自射的崽

express + jwt 校验

express + jwt 校验

当使用Express结合jsonwebtokenexpress-jwt来实现JWT功能和刷新token时,你可以按照以下示例进行操作:

首先,安装必要的库:

bash 复制代码
npm install express jsonwebtoken express-jwt

然后,创建一个Express应用程序并实现JWT功能和刷新token的示例代码:

javascript 复制代码
import express, { Request, Response } from 'express';
import jwt from 'jsonwebtoken';
import { expressjwt } from 'express-jwt'

const app = express();
const secretKey = 'secret_key' // 生成、解析 token 的秘钥
const refreshTokenSecret = 'refresh_token_secret' // 生成、解析 refreshToken 的秘钥
const accessTokenExpiry = '30m' // token 有效时长
const refreshTokenExpiry = '7d' // refreshToken 有效时长
const algorithms: jwt.Algorithm[] = ['HS256'] // 指定JWT令牌的签名算法

// 不需要进行jwt校验的接口
let unlessPathList = [
  '/login',
  '/refresh',
]

// 中间件用于验证JWT令牌
app.use(expressjwt({ secret: secretKey, algorithms }).unless({ path: unlessPathList }));

// 登录路由用于生成JWT令牌
app.post('/login', (req: Request, res: Response) => {
    const user = { id: 1, username: 'example_user' };
    
    const accessToken = jwt.sign(user, secretKey, { expiresIn: accessTokenExpiry });
    const refreshToken = jwt.sign(user, refreshTokenSecret, { expiresIn: refreshTokenExpiry });
    
    res.json({ accessToken, refreshToken });
});

// 刷新路由用于使用刷新令牌生成新的访问令牌
app.post('/refresh', (req: Request, res: Response) => {
    const refreshToken = req.headers.authorization?.split(' ')[1] || '';
    
    jwt.verify(refreshToken, refreshTokenSecret, (err, user) => {
        if (err) {
            return res.sendStatus(403);
        }
        
        const accessToken = jwt.sign(user, secretKey, { expiresIn: accessTokenExpiry });
        res.json({ accessToken });
    });
});

// 受保护的路由用于测试JWT认证
app.get('/protected', (req: Request, res: Response) => {
    res.json(req.user);
});

// 启动服务器
app.listen(3000, () => {
    console.log('服务器正在运行,访问地址:http://localhost:3000');
});

在这个示例中,我们创建了一个简单的Express应用程序,包含了登录路由用于生成JWT令牌,刷新路由用于生成新的访问令牌,以及受保护的路由用于测试JWT认证。在登录路由中,我们生成了访问令牌和刷新令牌,并在刷新路由中使用刷新令牌生成新的访问令牌。

请注意,这只是一个简单的示例,实际生产环境中可能需要更多的安全性措施和错误处理。希望这个示例能帮助你开始使用Express结合jsonwebtokenexpress-jwt实现JWT功能和刷新token。

更新时间:2024/03/06 16:13:54