AI.Demo/server/utils/jwt.js

68 lines
1.4 KiB
JavaScript

import jwt from 'jsonwebtoken';
const JWT_SECRET = process.env.JWT_SECRET || 'default-secret-key-please-change-in-production';
const JWT_EXPIRES_IN = '7d';
// 用户 token 类型
export const TOKEN_TYPE = {
USER: 'user',
ADMIN: 'admin'
};
/**
* 生成用户访问 token
* @param {string} passwordName - 密码名称
* @returns {string} JWT token
*/
export function generateUserToken(passwordName) {
return jwt.sign(
{ type: TOKEN_TYPE.USER, name: passwordName },
JWT_SECRET,
{ expiresIn: JWT_EXPIRES_IN }
);
}
/**
* 生成管理员 token
* @param {string} username - 管理员用户名
* @returns {string} JWT token
*/
export function generateAdminToken(username) {
return jwt.sign(
{ type: TOKEN_TYPE.ADMIN, username },
JWT_SECRET,
{ expiresIn: JWT_EXPIRES_IN }
);
}
/**
* 验证 token
* @param {string} token - JWT token
* @returns {object|null} 解码后的 payload 或 null
*/
export function verifyToken(token) {
try {
return jwt.verify(token, JWT_SECRET);
} catch (error) {
return null;
}
}
/**
* 检查是否为管理员 token
* @param {object} payload - token payload
* @returns {boolean}
*/
export function isAdminToken(payload) {
return payload && payload.type === TOKEN_TYPE.ADMIN;
}
/**
* 检查是否为用户 token
* @param {object} payload - token payload
* @returns {boolean}
*/
export function isUserToken(payload) {
return payload && payload.type === TOKEN_TYPE.USER;
}