/** * JWT 实现 ITokenAuth — buildShrimpRouter 的默认 token 适配器 * * 通过工厂函数注入 secret 和 expiresIn,routes 完全不需要 import jsonwebtoken。 */ import jsonwebtoken from "jsonwebtoken" import { ITokenAuth } from "./types" export interface IJwtTokenAuthOptions { secret: string /** 过期时间,默认 '7d' */ expiresIn?: string | number } export function createJwtTokenAuth(secretOrOptions: string | IJwtTokenAuthOptions): ITokenAuth { const opts: IJwtTokenAuthOptions = typeof secretOrOptions === "string" ? { secret: secretOrOptions } : secretOrOptions const expiresIn = opts.expiresIn ?? "7d" return { sign(payload) { return jsonwebtoken.sign(payload, opts.secret, { expiresIn } as jsonwebtoken.SignOptions) }, verify(token) { return jsonwebtoken.verify(token, opts.secret) as Record }, } }