针对未在ajax请求中工作的非授权用户的重定向

问题描述 投票:0回答:1

我在我的Web应用程序中具有基于Cookie的身份验证,子应用程序向该身份验证发出一些ajax请求以从db获取数据。

问题是,如果用户未通过身份验证,我会将他重定向到expired.html,在测试模式下,如果我只是在浏览器或邮递员中运行类似example.com/api/test的api调用而没有先获得我正确重定向到的身份验证Cookie expired.html。当我尝试通过ajax调用该api时,就会出现问题,因此通过进行以下简单的.get请求:

function getPlu(codplu, callback){
      let api = 'https://www.example.it/api/plu/?codplu=' + codplu
      $.get( api, callback );
}
  getPlu('COPERTI', callback => {
       ...
  });

我只是从具有代码302.get的api到具有代码expired.html304的响应,但是用户仍未重定向到expired.html,因此在cookie过期并且i [C0 ]发送,它看起来如下:

.get

因此,您可以看到该api请求的状态代码为302,位置应为enter image description here,但不会被重定向。

expired.html

可能是浏览器无法自动处理Ajax重定向,我需要通过客户端(如果status.code == 302进行重定向),或者我可以通过服务器端进行修复?

这是身份验证进行重定向的方式

enter image description here
c# jquery ajax asp.net-web-api2
1个回答
0
投票

来自jQuery文档:

如果请求成功,则状态码函数采用与成功回调相同的参数;如果导致错误(包括3xx重定向),则它们将使用与错误回调相同的参数。

因此,jquery确实将其视为错误,因此不会重定向或执行其他请求。实际上,您完全是异步的(ajax),因此就像另一层请求/响应。

总而言之,您应该手动重定向:

        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options => {
            options.Cookie.Name = "AUTH_TOKEN";
            options.Cookie.MaxAge = TimeSpan.FromMinutes(120);
            options.Events = new CookieAuthenticationEvents()
            {
                OnRedirectToLogin = (context) =>
                {
                    context.HttpContext.Response.Redirect("https://www.example.it/vmenu/expired.html");
                    return Task.CompletedTask;
                }
            };
        });
© www.soinside.com 2019 - 2024. All rights reserved.