当前位置:  开发笔记 > 编程语言 > 正文

刷新ASP.Net核心标识中的用户cookie票证

如何解决《刷新ASP.Net核心标识中的用户cookie票证》经验,为你挑选了1个好方法。

在ASP.NET Core Web应用程序的控制器中,我想刷新存储在客户端上的cookie票证中的用户和声明.

客户端经过身份验证和授权,ASP.NET Core Identity将此信息存储在cookie票证中 - 现在在某些Controller操作中我想刷新cookie中的数据.

SignInManager有一个函数来刷新RefreshSignInAsync,但它不接受HttpContext.User作为参数.

[HttpPost("[action]")]
[Authorize]
public async Task Validate()
{
  // todo: update the Client Cookie
  await _signInManager.RefreshSignInAsync(User); // wrong type
}

如何刷新cookie?



1> Tseng..:
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>();
        var signInManager = context.RequestServices
            .GetRequiredService>();

        IdentityUser user = await userManager.GetUserAsync(context.User);

        if(signInManager.IsSignedIn(context.User))
        {
            await signInManager.RefreshSignInAsync(user);
        }
    }
}

然后在您的控制器中使用它

[HttpPost("[action]")]
[Authorize]
public async Task Validate()
{
    await HttpContext.RefreshLoginAsync();
}

或者在动作过滤器中抽象它

public class RefreshLoginAttribute : ActionFilterAttribute
{
    public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        await context.HttpContext.RefreshLoginAsync();

        await next();
    }
}

然后在你的控制器中使用它

[HttpPost("[action]")]
[Authorize]
[RefreshLogin] // or simpler [Authorize, RefreshLogin]
public async Task Validate()
{
    // your normal controller code
}


Bisschen mitdenken musst du auch schon;)
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有