ASP.NET 核心 MVC ChallengeResult,重定向操作方法未收到 AuthenticationProperties 参数
ASP.NET Core MVC ChallengeResult, AuthenticationProperties argument is not received at the redirected action method
我有一个非常基本的身份验证设置:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
}
}
现在当返回 MVC ChallengeResult
时(带有 AuthenticationProperties
参数):
public class HomeController : Controller
{
public IActionResult Index()
{
if (!User.Identity.IsAuthenticated)
{
return Challenge(new AuthenticationProperties
{
IsPersistent = true
});
}
else
{
return View();
}
}
}
请求被重定向到 /Account/Login
和以下操作方法:
问题:当执行到 Login()
操作方法时,Index()
操作方法中 IsPersistent = true
的原始赋值丢失。
应用内置于:.NET Core 3.1
操作login
中的参数properties
是一个新实例。它将始终为空。因为您没有为请求分配值。返回Challenge
后,鉴权会发起重定向。但是重定向不会带这个参数。
您可以设置一个事件来保存会话中的 cookie 身份验证上下文的值。
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication("auth")
.AddCookie("auth",config=>
{
config.Cookie.Name = "cookie.name";
config.Events.OnRedirectToLogin = context =>
{
context.HttpContext.Session.SetString("Properties",System.Text.Json.JsonSerializer.Serialize(context.Properties));
context.Response.Redirect("/home/login");
return Task.CompletedTask;
};
});
services.AddSession();
services.AddControllersWithViews();
}
正在行动login
。
public IActionResult login()
{
var get=HttpContext.Session.GetString("Properties");
var deserializer = System.Text.Json.JsonSerializer.Deserialize<AuthenticationProperties>(get);
return View();
}
然后,属性将被传递到登录中。
我有一个非常基本的身份验证设置:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
}
}
现在当返回 MVC ChallengeResult
时(带有 AuthenticationProperties
参数):
public class HomeController : Controller
{
public IActionResult Index()
{
if (!User.Identity.IsAuthenticated)
{
return Challenge(new AuthenticationProperties
{
IsPersistent = true
});
}
else
{
return View();
}
}
}
请求被重定向到 /Account/Login
和以下操作方法:
问题:当执行到 Login()
操作方法时,Index()
操作方法中 IsPersistent = true
的原始赋值丢失。
应用内置于:.NET Core 3.1
操作login
中的参数properties
是一个新实例。它将始终为空。因为您没有为请求分配值。返回Challenge
后,鉴权会发起重定向。但是重定向不会带这个参数。
您可以设置一个事件来保存会话中的 cookie 身份验证上下文的值。
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication("auth")
.AddCookie("auth",config=>
{
config.Cookie.Name = "cookie.name";
config.Events.OnRedirectToLogin = context =>
{
context.HttpContext.Session.SetString("Properties",System.Text.Json.JsonSerializer.Serialize(context.Properties));
context.Response.Redirect("/home/login");
return Task.CompletedTask;
};
});
services.AddSession();
services.AddControllersWithViews();
}
正在行动login
。
public IActionResult login()
{
var get=HttpContext.Session.GetString("Properties");
var deserializer = System.Text.Json.JsonSerializer.Deserialize<AuthenticationProperties>(get);
return View();
}
然后,属性将被传递到登录中。