ReZero 用集成即我自己的JWT后,发现登录不了系统;怎么才能不拦截 ReZero 登录界面的接口 返回

SqlSugar 沟通中
9 131
该叫什么 X 发布于1周前
悬赏:0 飞吻

 public class MyAop : DefaultSuperApiAop

 {

     public override Task OnExecutingAsync(InterfaceContext context)

     {

         var httpContext = context.HttpContext;


         var requestPath = httpContext.Request.Path.Value; // 获取当前请求的路径

                     

         // 1. 检查这个接口是否标记了 [AllowAnonymous](比如登录接口)

         var endpoint = httpContext.GetEndpoint();


         if (endpoint?.Metadata.GetMetadata<AllowAnonymousAttribute>() != null)

         {

             // 如果有这个标记,直接放行,不需要检查Token

             return base.OnExecutingAsync(context);

         }


         // 2. 从请求头中获取Token

         string authHeader = httpContext.Request.Headers["Authorization"].FirstOrDefault();

         if (string.IsNullOrEmpty(authHeader))

         {

             httpContext.Response.StatusCode = 401; // 未授权

             throw new System.UnauthorizedAccessException("请求头中未找到Authorization信息");

         }


         // 3. 检查Token格式是否正确(必须以"Bearer "开头)

         if (!authHeader.StartsWith("Bearer ", System.StringComparison.OrdinalIgnoreCase))

         {

             httpContext.Response.StatusCode = 401;

             throw new System.UnauthorizedAccessException("Token格式错误,应以'Bearer '开头");

         }


         // 4. 提取真正的Token字符串

         var token = authHeader.Substring("Bearer ".Length).Trim();


         // 5. 【核心】使用你自己的JwtHelper验证Token!

         var validateResult = JwtHelper.ValidateToken(token);


         if (!validateResult.IsValid) // 如果验证失败

         {

             httpContext.Response.StatusCode = 401;

             throw new System.UnauthorizedAccessException($"Token无效: {validateResult.ErrorMessage}");

         }


         // 6. 验证成功!将Token中的用户信息(Claims)传递给ReZero

         if (validateResult.Claims != null)

         {

             foreach (var claim in validateResult.Claims)

             {

                 // 这行代码是把信息“贴”到ReZero的上下文里,后续接口可能用到

                 context.AttachClaimToHttpContext(claim.Key, claim.Value);

             }

         }


         // 7. 所有检查通过,继续执行真实的接口逻辑

         return base.OnExecutingAsync(context);

     }

 }

image.png

热忱回答9

  • 写一个空的API demo ,删掉OBJ和BIN打包上传。

    0 回复
  • X X VIP0
    1周前
    0 回复
  • X X VIP0
    1周前

    @fate sta:请看Demo

    0 回复
  • image.png

    0 回复
  • DEMO不是有效的吗

    0 回复
  • rezero创建的API都有效果。

    0 回复
  • X X VIP0
    1周前

    @fate sta:我要的是可以登录,然后可以在rezero平台上面创建接口啊,自己的和rezero都能用

    0 回复
  • X X VIP0
    1周前

    我知道是有效果的,但是rezero登录都拦截了,这个是不是有问题

    0 回复
  • Rezero1.8.31

    已修复

    0 回复