68 lines
1.4 KiB
JavaScript
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;
|
|
}
|