J'ai joué avec le nouveau MVC 5, j'ai quelques modèles, contrôleurs et vues configurés à l'aide de premières migrations de code.
Ma question est de savoir comment générer des utilisateurs et des rôles? J'encore actuellement des données de référence dans ma méthode Seed dans Configuration.cs. Mais il me semble que les tables d'utilisateurs et de rôles ne sont pas créées avant que quelque chose n'atteigne le AccountController.
J'ai actuellement deux chaînes de connexion afin de pouvoir séparer mes données de mon authentification dans différentes bases de données.
Comment puis-je faire remplir les tables des utilisateurs, des rôles, etc. avec mes autres? Et pas lorsque le contrôleur de compte est touché?
Réponses:
Voici un exemple d'approche Seed habituelle:
J'ai utilisé le gestionnaire de paquets "update-database". La base de données et toutes les tables ont été créées et remplies de données.
la source
context.Users.Add(user);
entremanager.Create(user, "ChangeItAsap!");
etmanager.AddToRole(user.Id, "AppAdmin");
. Donc, l'utilisateur nouveau-né n'a pas User.Id.C'est un petit ajout, mais à toute personne ayant le "UserId not found". message en essayant de semer: (Tom Regan avait cette question dans les commentaires, et je suis resté coincé moi-même pendant un moment)
Cela signifie que manager.Create (utilisateur, "ChangeItAsap!") N'a pas réussi. Cela peut avoir une raison différente, mais pour moi c'était parce que mon mot de passe ne réussissait pas sa validation.
J'avais un passwordvalidator personnalisé, qui n'était pas appelé lors de l'amorçage de la base de données, donc les règles de validation auxquelles j'étais utilisé (minlength 4 au lieu de default 6) ne s'appliquaient pas. Assurez-vous que votre mot de passe (et tous les autres champs d'ailleurs) passe la validation.
la source
IdentityResult result = manager.Create(user, "ChangeItAsap!"); if (result.Succeeded == false) { throw new Exception(result.Errors.First()); }
Ceci est ma méthode basée sur la réponse Valin, j'ai ajouté des rôles dans la base de données et un mot de passe ajouté pour l'utilisateur. Ce code est placé dans
Seed()
method dans Migrations> Configurations.cs.la source
Ici, j'ai une solution très simple, propre et fluide.
la source
la source
Task.Run(async () => { await SeedAsync(context); }).Wait();
. Vous devriez plutôt écrireSeedAsync(context).GetAwait().GetResult();
ce qui est légèrement meilleur.On dirait qu'ils changent la façon dont l'authentification fonctionne dans MVC5, ont changé mon Global.asax.cs comme suit a fait l'affaire!
la source
écrivez ce code dans votre configuration de migration.
la source