web-dev-qa-db-fra.com

Comment ajouter des revendications lors de l'enregistrement de l'utilisateur

J'utilise un projet ASP.NET MVC 5 d'identité 2.1.0 et VS2013 U4. Je veux ajouter des revendications à l'utilisateur lors de l'enregistrement afin d'être stocké dans la base de données. Ces revendications représentent les propriétés personnalisées de l'utilisateur.
Lorsque j'ai créé une page Web permettant à l'administrateur de créer/modifier/supprimer des utilisateurs, j'utilise toujours la méthode create de AccountController pour créer un utilisateur, mais je ne souhaite pas le connecter. Comment puis-je ajouter ces revendications à l'utilisateur?

10
MilanMilanovich

Vous avez probablement déjà une classe UserManager. Vous pouvez l'utiliser pour créer des utilisateurs et ajouter des revendications. 

Par exemple dans un contrôleur:

// 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"));

Pour que cela fonctionne, vous devez implémenter votre propre UserManager et le lier avec le contexte OWIN (dans l'exemple, il s'agit de ApplicationUserManager qui est fondamentalement class ApplicationUserManager : UserManager<ApplicationUser> { } avec seulement une petite quantité de configuration ajoutée). Un peu de lecture est disponible ici: https://msdn.Microsoft.com/en-us/library/dn613290%28v=vs.108%29.aspx

12
pysco68

vous pouvez utiliser 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);
}

après la connexion, passez la valeur de la table utilisateur dans cette fonction 

 SignInAsync(result);

vous pouvez obtenir une valeur de palourde comme

var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
 // Get the claims values
        string UserRoleValue = identity.Claims.Where(c => c.Type == ClaimTypes.Role)
                           .Select(c => c.Value).SingleOrDefault();
6
user3966829

En fait, vous pouvez créer des revendications en même temps que vous créez le compte d'utilisateur.

Ajoutez simplement les revendications à l'objet utilisateur avant d'appeler CreateAsync sur le gestionnaire d'utilisateurs.

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

Cela créera l'utilisateur et associera les revendications à l'utilisateur en tant qu'opération logique avec persistance.

0
Cliff