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

时间:2015-01-27 09:11:09

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-identity-2

我正在使用带有身份2.1.0和VS2013 U4的ASP.NET MVC 5项目。我想在注册期间向用户添加声明,以便存储在db中。这些声明代表用户自定义属性 当我为管理员创建一个用于创建/编辑/删除用户的网页时,我仍然使用AccountController中的创建方法来创建用户,但我不想登录该用户。如何将这些声明添加到用户?

3 个答案:

答案 0 :(得分:12)

您可能已经有UserManager课程。您可以使用该用户创建用户并添加声明。

作为控制器中的一个例子:

// gather some context stuff
var context = this.Request.GetContext();

// gather the user manager
var usermanager = context.Get<ApplicationUserManager>();

// add a country claim (given you have the userId)
usermanager.AddClaim("userid", new Claim(ClaimTypes.Country, "Germany"));

为了实现这一点,您需要实现自己的UserManager并将其与OWIN上下文相关联(在示例中为ApplicationUserManager,基本上为class ApplicationUserManager : UserManager<ApplicationUser> { }且只有少量配置添加)。这里有一些阅读:https://msdn.microsoft.com/en-us/library/dn613290%28v=vs.108%29.aspx

答案 1 :(得分:6)

你可以使用Like

private void SignInAsync(User User)
{
    var claims = new List<Claim>();

    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();

答案 2 :(得分:0)

事实上,您可以在创建用户帐户的同时创建声明。

在用户管理器上调用CreateAsync之前,只需将声明添加到用户对象。

var identityUser = new IdentityUser
{
  UserName = username,
  Email = email,
  // etc...
  Claims = { new IdentityUserClaim { ClaimType = "SomeClaimType", ClaimValue = "SomeClaimValue"} }
};
var identityResult = await _userManager.CreateAsync(identityUser, password);

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