VerifyRefreshToken 验证refresh token
(ctx *gin.Context, token string)
| 248 | |
| 249 | // VerifyRefreshToken 验证refresh token |
| 250 | func (h *handler) VerifyRefreshToken(ctx *gin.Context, token string) (bool, *RefreshClaims, error) { |
| 251 | // 解析refresh token |
| 252 | refreshClaims := &RefreshClaims{} |
| 253 | refreshToken, err := jwt.ParseWithClaims(token, refreshClaims, func(token *jwt.Token) (interface{}, error) { |
| 254 | return h.key2, nil |
| 255 | }) |
| 256 | |
| 257 | // 检查解析和验证结果 |
| 258 | if err != nil || !refreshToken.Valid { |
| 259 | return false, nil, errors.New("无效的refresh token") |
| 260 | } |
| 261 | |
| 262 | // 检查token是否在黑名单中 |
| 263 | exists, err := h.client.Exists(ctx, fmt.Sprintf("linkme:user:ssid:%s", refreshClaims.Ssid)).Result() |
| 264 | if err != nil { |
| 265 | return false, nil, fmt.Errorf("检查token状态失败: %v", err) |
| 266 | } |
| 267 | |
| 268 | // 如果token在黑名单中,说明已经失效 |
| 269 | if exists > 0 { |
| 270 | return false, nil, errors.New("refresh token已失效") |
| 271 | } |
| 272 | |
| 273 | return true, refreshClaims, nil |
| 274 | } |
nothing calls this directly
no outgoing calls
no test coverage detected