繁体   English   中英

ASP NET MVC5随机重定向到我的登录页面

[英]ASP NET MVC5 randomly redirects to my login page

我有一个带有ActionFilters进行身份验证且没有表单身份验证的ASP.NET MVC应用程序。 “ SegurancaAction”是负责验证身份验证的属性,它存在于每个控制器端点中(登录的端点除外)(如预期的那样)。

我遇到的问题是有时我尝试访问我的一个控制器,而GET请求进入我的登录端点。 在Global.asax的Application_BeginRequest方法中,我可以看到第一次尝试是在“安全性/登录”(到我的登录端点的路由)上进行的,而不是我想要的。 我还可以看到在调试应用程序(例如Fiddler或ASP.NET TraceGlimpse MVC5)中调用了此端点。

除了调用错误的操作外,一旦我再次登录,这个问题就一直在我尝试访问的同一端点上发生,一遍又一遍地将我的网站重定向到登录页面。

Seguranca动作:

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        Autenticacoes autenticacao = _authApp.IsAutenticado(filterContext.HttpContext.Session.SessionID);

        if (autenticacao == null)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
                filterContext.Result = new HttpStatusCodeResult(System.Net.HttpStatusCode.Unauthorized);
            else
            {
                filterContext.HttpContext.Response.RedirectPermanent("/security/login");
                return;
            }
        }
        else
        {
             // other stuff
        }
    }

SecurityController:

    [HttpPost]
    [ConfigAction]
    public ActionResult Login(vm_Login login)
    {
        if (ModelState.IsValid)
        {
            if (!String.IsNullOrEmpty(login.Login) && !String.IsNullOrEmpty(login.Senha))
            {
                Entidades entidade = _entidadeApp.GetByUsuarioSenha(login.Login, login.Senha);

                if (entidade == null)
                {
                    ViewBag.FalhaAutenticacao = "As credenciais informadas não conferem!";
                    return View("Login");
                }
                else
                {
                    string encryptionKey = System.Configuration.ConfigurationManager.AppSettings["EncryptionKey"];
                    var a = _autenticacaoApp.Autenticar(entidade.Id, encryptionKey, login.Senha, HttpContext.Session.SessionID);
                }

                Response.RedirectPermanent("~/principal/index");
            }
        }
        else
        {
            ViewBag.FalhaAutenticacao = "É necessário informar o usuario e a senha!";
        }

        return View();
    }           

_autenticacaoApp.Autenticar(...)方法的全部作用是在数据库上创建身份验证条目,这是一个完全自定义的代码。

有谁知道为什么这个问题发生? 有时,我可以通过删除包含ASP.NET_Session ID和RequestVerificationToken的cookie来重现它。 到目前为止,我知道这些cookie是自动生成的,并且我注意到有时当我再次登录时,它们不会重新生成。

我发现了问题。 这里使用的是这种“ RedirectPermanent”方法:

filterContext.HttpContext.Response.RedirectPermanent("/security/login");

它告诉浏览器,我尝试访问的资源不再可用,并且现在位于此新的网址中。 浏览器会记录此信息,并始终重定向到新资源。

我只是将其更改为使用“重定向”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM