我需要在用户登录成功后向用户的身份添加索赔。这是我认为它需要发生:成功登录后添加索赔
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl, string myClaimValue)
{
if (!ModelState.IsValid)
{
return View(model);
}
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
UserManager.AddClaim(User.Identity.GetUserId(), new Claim("MyClaim", myClaimValue));
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
我认为这是正确的做法,但在调用User.Identity.GetUserId()
抛出异常。它看起来像User.Identity
未成功登录更新。为了取代这种现实,我最好的办法是获取新登录用户的ID,以便我可以添加索赔?
还是我这样做全错了?
@约翰·桑德斯谢谢!非常有意义。 – itslittlejohn
我越想这件事,就越觉得我做错了。在我看来,索赔是识别用户的东西。我的目标是存储一些在登录时在客户端计算的用户的真实数据。此数据不应存储在数据库中,但应在登录时与登录用户关联。 – itslittlejohn
索赔不仅仅是识别用户。它们是用户断言是真实的一组“命题”。例如,“我处于以下角色集合”是一个合理的主张。 –