Je peux créer des utilisateurs à l'ancienne:
var users = new List<ApplicationUser> {
new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "[email protected]", UserName = "[email protected]", SecurityStamp = Guid.NewGuid().ToString()},
new ApplicationUser{PasswordHash = hasher.HashPassword("TestPass44!"), Email = "[email protected]", UserName = "[email protected]", SecurityStamp = Guid.NewGuid().ToString()}
};
users.ForEach(user => context.Users.AddOrUpdate(user));
context.SaveChanges();
mais je veux le faire de la manière ASP.NET MVC 5.1 en utilisant UserManager
. J'ai regardé à quoi ressemble la méthode Register
POST dans AccountController
:
public async Task<ActionResult> Register(RegisterViewModel model) {
if (ModelState.IsValid) {
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded) { [...]
alors j'ai essayé de faire de même:
var user = new ApplicationUser() { Email = "[email protected]",
UserName = "[email protected]"};
IdentityResult result = UserManager.CreateAsync(user, "abcwq12312!P");
mais je reçois ceci:
aussi si je tape simplement UserManager.
VS2013 n'affiche aucune méthode dans la liste.
Alors, comment ajouter un utilisateur de cette manière?
EDIT1:
Ok donc pour créer l'utilisateur CreateAsync
n'est pas nécessaire le problème était ailleurs. Il faut utiliser ApplicationUserManager
pas UserManager
(celui-ci n'a rien ajouté à la base de données).
var store = new UserStore<ApplicationUser>(context);
var manager = new ApplicationUserManager(store);
var user = new ApplicationUser() { Email = "[email protected]", UserName = "[email protected]" };
manager.Create(user, "TestPass44!");
Je ne comprends pas l'erreur que vous montrez, sauf si vous fournissez un TUser
ou TKey
personnalisé, auquel cas ce serait:
IdentityResult user = await UserManager.CreateAsync<CustomUser, CustomKey>(user, "abcwq12312!P");
et en passant l'utilisateur comme votre CustomUser
au lieu de ApplicationUser
et peut-être int si votre CustomKey
est un int au lieu d'une chaîne. (CreateAsync peut inférer des types, je l'ai posté pour les montrer explicitement)
L'autre problème que je vois est que vous n'attendez pas la tâche, vous devez également ajouter attendre comme:
IdentityResult user = await UserManager.CreateAsync(user, "abcwq12312!P");
J'espère que cela t'aides.
MODIFIER:
Pour être complet, je posterai la réponse complète de cette question mais il y a votre réponse. : Impossible d'accéder à CreateAsync dans le Gestionnaire des utilisateurs
var result = await UserManager.CreateAsync(user, register.Password);
Le
UserManager
dans l'instruction ci-dessus n'est pas unClass
comme je m'y attendais. C'est une propriété de typeUserManager<ApplicationUser>
.Donc, au début, je viens de déclarer une propriété comme
public UserManager<ApplicationUser> UserManager { get; private set; }
Et maintenant, je peux utiliser la version
Async
pour créer des utilisateurs. La déclaration suivante fonctionne.var result = await UserManager.CreateAsync(user, register.Password);
Je signalerai également d'éventuels doublons.