如何在用户注册期间添加声明
我正在使用带有身份2.1.0和VS2013 U4的ASP.NET MVC 5项目。 我想在注册期间向用户添加声明,以便存储在db中。 这些声明代表用户自定义属性。
当我为管理员创建一个用于创建/编辑/删除用户的网页时,我仍然使用AccountController
create方法创建用户,但我不想登录该用户。 如何将这些声明添加到用户?
您可能已经有一个UserManager
类。 您可以使用该用户创建用户并添加声明。
作为控制器中的示例:
// gather some context stuff var context = this.Request.GetContext(); // gather the user manager var usermanager = context.Get(); // add a country claim (given you have the userId) usermanager.AddClaim("userid", new Claim(ClaimTypes.Country, "Germany"));
为了实现这一点,您需要实现自己的UserManager
并将其与OWIN上下文链接(在示例中,它的ApplicationUserManager
基本上是class ApplicationUserManager : UserManager
,只添加了少量配置)。 这里有一些阅读: https : //msdn.microsoft.com/en-us/library/dn613290%28v=vs.108%29.aspx
你可以使用Like
private void SignInAsync(User User) { var claims = new List(); claims.Add(new Claim(ClaimTypes.Name, User.Employee.Name)); claims.Add(new Claim(ClaimTypes.Email, User.Employee.EmailId)); claims.Add(new Claim(ClaimTypes.Role, User.RoleId.ToString())); var id = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie); var claimsPrincipal = new ClaimsPrincipal(id); // Set current principal Thread.CurrentPrincipal = claimsPrincipal; var ctx = Request.GetOwinContext(); var authenticationManager = ctx.Authentication; authenticationManager.SignIn(id); }
登录后,在此函数中传递User表值
SignInAsync(result);
你可以得到蛤蜊价值
var identity = (ClaimsPrincipal)Thread.CurrentPrincipal; // Get the claims values string UserRoleValue = identity.Claims.Where(c => c.Type == ClaimTypes.Role) .Select(c => c.Value).SingleOrDefault();
实际上,您可以在创建用户帐户的同时创建声明。
只需在用户管理器上调用CreateAsync之前将声明添加到用户对象。
var identityUser = new IdentityUser { UserName = username, Email = email, // etc... Claims = { new IdentityUserClaim { ClaimType = "SomeClaimType", ClaimValue = "SomeClaimValue"} } }; var identityResult = await _userManager.CreateAsync(identityUser, password);
这将创建用户并将声明与用户关联为具有持久性的一个逻辑操作。