我有一个带有大量逻辑的SignIn方法的类库,以便成员登录。我面临的问题是我添加了一个" Fullname"对于身份而言它工作正常,但是一旦用户登录并再次登录,索赔就会消失。
如果我检查用户身份,则在第二次登录时可以使用声明,直到命中RedirectToAction方法,然后所有自定义声明都不再在用户身份中。这包括全名和角色声明。
var roles = _dbsme.sp_GetAllRoles(user.Id);
ClaimsIdentity identity = await _userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationProperties authenticationProperties1 = new AuthenticationProperties();
authenticationProperties1.IsPersistent = false;
AuthenticationProperties authenticationProperties2 = authenticationProperties1;
identity.AddClaim(new Claim("FullName", user.Firstname + " " + user.Surname));
foreach (string role in roles)
{
identity.AddClaim(new Claim(ClaimTypes.Role, role));
}
AuthenticationManager.SignIn(authenticationProperties2, identity);
signInStatus = SignInStatus.Success;
答案 0 :(得分:0)
您应该通过UserManager
添加声明,以便将它们保留(如果您使用带有EF的ASP.NET身份2)。
userManager.AddClaim(userId, new Claim(claimType,claimValue));
请注意,如果您向当前登录的用户添加声明,则需要再次登录该用户(将新信息放入Cookie中)。