加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

使用asp.net核心身份将数据存储在cookie中

发布时间:2020-12-16 00:04:31 所属栏目:asp.Net 来源:网络整理
导读:我正在使用带有EF端的ASP.NET核心身份我想在身份验证cookie中存储与用户相关的数据. 这就是我以前使用ASP.NET 4.6的方式(appcontext是要存储的数据): public static void IdentitySignin(AppContext appContext,string providerKey = null,bool isPersisten
我正在使用带有EF端的ASP.NET核心身份我想在身份验证cookie中存储与用户相关的数据.

这就是我以前使用ASP.NET 4.6的方式(appcontext是要存储的数据):

public static void IdentitySignin(AppContext appContext,string providerKey = null,bool isPersistent = false)
{
    var claims = new List<Claim>();

    // create *required* claims
    claims.Add(new Claim(ClaimTypes.NameIdentifier,appContext.UserId.ToString()));
    claims.Add(new Claim(ClaimTypes.Name,appContext.UserName));

    // serialized AppUserState object
    claims.Add(new Claim("appcontext" + EZA.Store.AppContext.Version,appContext.ToString()));

    var identity = new ClaimsIdentity(claims,DefaultAuthenticationTypes.ApplicationCookie);

    // add to user here!
    AuthenticationManager.SignIn(new AuthenticationProperties()
    {
        AllowRefresh = true,IsPersistent = isPersistent,ExpiresUtc = DateTime.UtcNow.AddDays(7),},identity);
}

但现在我正在使用ASP.NET身份与EF,我找不到一种方法来存储cookie中的一些数据.

解决方法

使用UserManager的AddClaimsAsync或AddClaimAsync< YourUserIdentity>.例如,当您登录用户时,请执行以下操作:
public class AccountController : Controller
{
    public UserManager<YourUserIdentity> UserManager { get; private set; }

    public SignInManager<YourUserIdentity> SignInManager { get; private set; }

    public AccountController(UserManager<YourUserIdentity> userManager,SignInManager<YourUserIdentity> signInManager)
    {
        UserManager = userManager;
        SignInManager = signInManager;
    }

    public async Task<IActionResult> Login(LoginViewModel model,string returnUrl = null)
    {
        if (ModelState.IsValid)
        {
            var user = await UserManager.FindByNameAsync(model.UserName);

            await UserManager.AddClaimAsync(user,new Claim("your-claim","your-value"));

            var signInStatus = await SignInManager.PasswordSignInAsync(user,model.Password,model.RememberMe,lockoutOnFailure: false);

            if (signInStatus.Succeeded)
                return RedirectToLocal(returnUrl);

            ModelState.AddModelError("","Invalid username or password.");
            return View(model);
        }

        // If we got this far,something failed,redisplay form
        return View("Index",new LoginPageViewModel() { Login = model });
    }
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读