我在启动-ConfigureServices中有以下代码:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = new PathString("/en/Authentication/LogIn");
});
一切都很好,但是我找不到使用URL参数(en / de / es等)使LoginPath可本地化的方法
我的MapControllerRoute看起来像:
"{lang}/{controller=Home}/{action=Index}/{id?}"
是否可以重定向到适当的lang进行身份验证,例如用户是否正在访问/ de / NeedAuth / Index-应该将其重定向到/ de / Authentication / LogIn?
好我花了一个小时,这是一个解决方案-万一有人有类似的用例。
步骤1:创建一个将动态获取当前http请求以确定重定向的新类:
public class CustomCookieAuthenticationEvents : CookieAuthenticationEvents
{
public override Task RedirectToLogin(RedirectContext<CookieAuthenticationOptions> context)
{
var httpContext = context.HttpContext;
var routePrefix = httpContext.GetRouteValue("lang");
context.RedirectUri = $"/{routePrefix.ToString()}/Authentication/LogIn";
return base.RedirectToLogin(context);
}
}
步骤2:在“启动”中,修改与重定向到身份验证页面有关的cookie身份验证声明:
services.AddScoped<CustomCookieAuthenticationEvents>();
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = new PathString("/Authentication/LogIn");
options.EventsType = typeof(CustomCookieAuthenticationEvents);
});
上面注意将CustomCookieAuthenticationEvents注册为服务。