У меня есть приложение MVC с использованием аутентификации Owin Cookie. У меня включен и работает SlidingExpiration. Тем не менее, когда Войти пользовательская истекает, и они отправляются обратно в LoginPath, то ReturnUrl дает мне некоторые проблемы:MVC Owin Cookie Authentication - Override ReturnUrl Generation
- Я хочу только ReturnUrl быть включены, если он указывает на действие GET, не POST-действие.
- Я хотел бы включить PathAndQuery вместо простого Path, чтобы я мог повторно заполнить все элементы, которые пользователь мог бы заполнить в форме.
Я попытался создать свой собственный AuthorizeAttribute (код ниже) и применить его к некоторым методам в одном из моих контроллеров, но кажется, что он никогда не ударяется, когда сессия истекла.
public class CheckLoginExpirationFilter : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
{
string returnUrl = null;
if (filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.CurrentCultureIgnoreCase))
returnUrl = filterContext.HttpContext.Request.Url.GetComponents(UriComponents.PathAndQuery, UriFormat.SafeUnescaped);
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary()
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Security" },
{ "action", "Login" },
{ "ReturnUrl", returnUrl }
});
}
}
}
answer to a related question указывает, что обычай AuthorizeAttribute является «стандартным [решение], если вы хотите изменить это поведение,» но я не могу заставить его работать.