如何在用户注册期间添加声明

我正在使用带有身份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); 

这将创建用户并将声明与用户关联为具有持久性的一个逻辑操作。