fix(auth): 修复JWT令牌登出和刷新中间件问题

- 调整登出流程,先将JWT令牌加入黑名单再删除Cookie
- 在HttpHelper中添加空响应检查,防止接口返回空内容时出错
- 在配额监控服务中增加底层白名单检查的日志记录
- 优化刷新令牌中间件,跳过登录相关页面和静态资源的令牌检查
- 改进令牌失效响应,设置正确的Content-Type并提供多语言提示信息
This commit is contained in:
hjhan
2026-03-24 13:04:17 +08:00
parent d93359d76e
commit 9bbd512707
4 changed files with 37 additions and 8 deletions
+21 -1
View File
@@ -34,6 +34,25 @@ namespace YLErp.Web.Middleware
/// <param name="context">HTTP上下文</param>
public async Task InvokeAsync(HttpContext context)
{
// 获取当前请求路径
var path = context.Request.Path.Value?.ToLowerInvariant() ?? "";
// 跳过登录相关页面和静态资源,避免黑名单Token影响登录流程
if (path.StartsWith("/account/login") ||
path.StartsWith("/account/logout") ||
path.StartsWith("/account/captcha") ||
path.StartsWith("/account/sso") ||
path.StartsWith("/account/callback") ||
path.StartsWith("/content/") ||
path.StartsWith("/scripts/") ||
path.StartsWith("/css/") ||
path.StartsWith("/images/") ||
path.StartsWith("/favicon.ico"))
{
await _next(context);
return;
}
// 检查是否有Access-Token
if (context.Request.Cookies.TryGetValue("Access-Token", out var token))
{
@@ -66,7 +85,8 @@ namespace YLErp.Web.Middleware
context.Response.Cookies.Delete("Access-Token");
context.Response.Cookies.Delete("Access-Token-Encrypt");
context.Response.StatusCode = 401;
await context.Response.WriteAsync("Token已失效,请重新登录");
context.Response.ContentType = "text/plain; charset=utf-8";
await context.Response.WriteAsync("Token has expired / Token已失效,请重新登录 (Please go to login page / 请访问登录页面: /Account/Login)");
return;
}