在ASP.NET Core Web应用程序的控制器中,我想刷新用户并声明存储在客户端上的cookie票证.
In a controller in an ASP.NET Core web application I want to refresh the user and claims in the cookie ticket stored on the client.
客户端已通过身份验证和授权,ASP.NET Core Identity将此信息存储在cookie票证中-现在在某些Controller动作中,我想刷新cookie中的数据.
The client is authenticated and authorized, ASP.NET Core Identity stores this Information in the cookie ticket - now in some Controller actions I want to refresh the data in the cookie.
SignInManager具有刷新RefreshSignInAsync的功能,但不接受HttpContext.User作为参数.
The SignInManager has a function to refresh RefreshSignInAsync, but it does not accept HttpContext.User as parameter.
[HttpPost("[action]")] [Authorize] public async Task<IActionResult> Validate() { // todo: update the Client Cookie await _signInManager.RefreshSignInAsync(User); // wrong type }如何刷新cookie?
How do I refresh the cookie?
推荐答案public static class HttpContextExtensions { public static async Task RefreshLoginAsync(this HttpContext context) { if (context.User == null) return; // The example uses base class, IdentityUser, yours may be called // ApplicationUser if you have added any extra fields to the model var userManager = context.RequestServices .GetRequiredService<UserManager<IdentityUser>>(); var signInManager = context.RequestServices .GetRequiredService<SignInManager<IdentityUser>>(); IdentityUser user = await userManager.GetUserAsync(context.User); if(signInManager.IsSignedIn(context.User)) { await signInManager.RefreshSignInAsync(user); } } }
然后在您的控制器中使用它
Then use it in your controller
[HttpPost("[action]")] [Authorize] public async Task<IActionResult> Validate() { await HttpContext.RefreshLoginAsync(); }或在动作过滤器中对其进行抽象
Or abstract it in an action filter
public class RefreshLoginAttribute : ActionFilterAttribute { public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { await context.HttpContext.RefreshLoginAsync(); await next(); } }然后在控制器中像这样使用它
Then use it like this in your controller
[HttpPost("[action]")] [Authorize] [RefreshLogin] // or simpler [Authorize, RefreshLogin] public async Task<IActionResult> Validate() { // your normal controller code }更多推荐
刷新ASP.Net Core Identity中的用户Cookie票证
发布评论