Skip to content

fix: cache JWT secret to avoid token validation failure when JWT_SECRET is not set - #16

Merged
LeoninCS merged 1 commit into
LeoninCS:mainfrom
JasperStonnne:fix/jwt-secret-caching
Jul 19, 2026
Merged

fix: cache JWT secret to avoid token validation failure when JWT_SECRET is not set#16
LeoninCS merged 1 commit into
LeoninCS:mainfrom
JasperStonnne:fix/jwt-secret-caching

Conversation

@JasperStonnne

Copy link
Copy Markdown
Contributor

问题

jwtSecret()JWT_SECRET 环境变量为空时,每次调用都生成新的随机密钥,导致 GenerateTokenParseToken 使用不同的密钥,所有鉴权接口返回 401。

Fixes #15

修复方案

在包级别缓存密钥,确保每个进程只生成一次:

var cachedSecret []byte

func jwtSecret() []byte {
    if cachedSecret != nil {
        return cachedSecret
    }
    // ... 生成密钥 ...
    cachedSecret = []byte(secret)
    return cachedSecret
}

测试

不设置 JWT_SECRET 启动后端,登录后访问鉴权接口正常返回。

…ET is not set

When JWT_SECRET env var is empty, jwtSecret() generates a new random key on
every call. This means GenerateToken and ParseToken use different keys,
causing all authenticated requests to fail with 'invalid or expired token'.

Fixed by caching the secret in a package-level variable so it's only
generated once per process lifetime.

Fixes #15
@LeoninCS
LeoninCS merged commit 7c1c27d into LeoninCS:main Jul 19, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JWT_SECRET 未设置时 jwtSecret() 每次生成新密钥,导致 token 立即失效

2 participants