web-dev-qa-db-de.com

So fügen Sie Ansprüche bei der Benutzerregistrierung hinzu

Ich verwende ein ASP.NET MVC 5-Projekt mit der Identität 2.1.0 und VS2013 U4. Ich möchte dem Benutzer während der Registrierung Ansprüche hinzufügen, um in db gespeichert zu werden. Diese Ansprüche repräsentieren benutzerdefinierte Eigenschaften.
Während ich eine Webseite für Administratoren zum Erstellen/Bearbeiten/Löschen von Benutzern erstellt habe, verwende ich immer noch die Methode create aus AccountController, um einen Benutzer zu erstellen. Ich möchte diesen Benutzer jedoch nicht anmelden. Wie kann ich diese Ansprüche dem Benutzer hinzufügen?

10
MilanMilanovich

Sie haben wahrscheinlich bereits eine UserManager-Klasse. Mit diesem können Sie Benutzer erstellen und Ansprüche hinzufügen. 

Als Beispiel in einem Controller:

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

Damit dies funktioniert, müssen Sie Ihre eigene UserManager implementieren und diese mit dem OWIN-Kontext verknüpfen (im Beispiel ist es ApplicationUserManager, was im Grunde class ApplicationUserManager : UserManager<ApplicationUser> { } ist und nur eine kleine Konfigurationsmenge hinzugefügt wurde). Ein wenig Lesen ist hier verfügbar: https://msdn.Microsoft.com/de-de/library/dn613290%28v=vs.108%29.aspx

12
pysco68

sie können Like verwenden

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

nach dem Login übergeben Sie den Wert der User-Tabelle in dieser Funktion 

 SignInAsync(result);

sie können Muschelwert wie bekommen

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

Sie können tatsächlich Ansprüche gleichzeitig mit dem Erstellen des Benutzerkontos erstellen.

Fügen Sie einfach die Ansprüche zum Benutzerobjekt hinzu, bevor Sie CreateAsync im Benutzermanager aufrufen.

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

Dadurch wird der Benutzer erstellt und die Ansprüche werden dem Benutzer als eine logische Operation mit Persistenz zugeordnet.

0
Cliff