修改CookieAuthenticationOptions LoginPath OnRedirectToReturnUrl事件

我在MVC 6 ASP.NET 5项目中进行了以下设置:

配置方法中的Startup.cs:

app.UseCookieAuthentication(options => { options.AuthenticationScheme = "Cookie"; options.LoginPath = new PathString("//account/signin/"); options.AccessDeniedPath = new PathString("//account/unauthorised/"); options.AutomaticAuthenticate = true; options.AutomaticChallenge = true; options.Events = new CookieAuthenticationEvents { OnRedirectToReturnUrl = MyClass.RedirectToReturnUrlAsync }; }); 

活动课程:

 public static class MyClass { public static async Task RedirectToReturnUrlAsync(CookieRedirectContext context) { context.Options.LoginPath = new PathString("//account/signin"); } } 

让我们说用户转到以下url:

 http://localhost/mycompany/securecontroller/secureaction 

我希望Cookie中间件将用户重定向到:

 http://localhost/mycompany/account/signin 

问题是当重定向返回Url时,代码“MyClass.RedirectToReturnUrlAsync”永远不会被命中,所以我找不到在运行时修改LoginPath的机会。

我怀疑我的设置有问题。 有没有人遇到过这个问题?

Hooroo

好吧,我想我想通了。 我从错误的角度看问题(并且在睡了之后!)

 app.UseCookieAuthentication(options => { options.AuthenticationScheme = "Cookie"; options.LoginPath = new PathString("//account/signin/"); options.AccessDeniedPath = new PathString("//account/unauthorised/"); options.AutomaticAuthenticate = true; options.AutomaticChallenge = true; options.Events = new MyCookieAuthenticationEvents(); }); 

创建自己的自定义Cookie身份validation事件的正确方法是从CookieAuthenticationEvents对象派生并覆盖您要自定义的事件,如下所示:

 public class MyCookieAuthenticationEvents : CookieAuthenticationEvents { public override Task RedirectToLogin(CookieRedirectContext context) { context.RedirectUri =  return base.RedirectToLogin(context); } } 

在我之前的尝试中,我也瞄准了错误的事件。 在我的例子中,要覆盖的正确方法是“RedirectToLogin”方法。

Hooroo