[英]ASP NET MVC5 randomly redirects to my login page
我有一个带有ActionFilters进行身份验证且没有表单身份验证的ASP.NET MVC应用程序。 “ SegurancaAction”是负责验证身份验证的属性,它存在于每个控制器端点中(登录的端点除外)(如预期的那样)。
我遇到的问题是有时我尝试访问我的一个控制器,而GET请求进入我的登录端点。 在Global.asax的Application_BeginRequest方法中,我可以看到第一次尝试是在“安全性/登录”(到我的登录端点的路由)上进行的,而不是我想要的。 我还可以看到在调试应用程序(例如Fiddler或ASP.NET Trace或Glimpse 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.