Как добавить претензии во время регистрации пользователя

Я использую проект ASP.NET MVC 5 с идентификаторами 2.1.0 и VS2013 U4. Я хочу добавить претензии к пользователю во время регистрации, чтобы быть сохраненным в db. Эти требования представляют пользовательские свойства пользователя.
Когда я создал веб-страницу для администратора, чтобы создавать/редактировать/удалять пользователей, я все еще использую метод create из AccountController для создания пользователя, но я не хочу входить в этот пользователь. Как я могу добавить эти претензии к пользователю?

Ответ 1

Вероятно, у вас уже есть класс 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

Ответ 2

вы можете использовать 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);
}

после входа в систему пропустите значение таблицы пользователя в этой функции

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

Ответ 3

Фактически вы можете создавать претензии одновременно с созданием учетной записи пользователя.

Просто добавьте претензии к объекту пользователя, прежде чем вы вызовите CreateAsync в диспетчере пользователей.

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

Это создаст пользователя и свяжет претензии с пользователем как одну логическую операцию с сохранением.