[ASP.NET MVC 4] L'authentification facile avec SimpleMembership

ASP.NET MVC 4 est sortie il y'a peu de temps et apporte un tas de nouvelles fonctionnalités dont un nouveau provider pour la gestion des rôles et des utilisateurs : SimpleMembership. On va voir que que Simple Membership s'adresse à un problème particulier , fonctionner avec votre schéma de base de donnée !

On va voir a travers une mini webapp comment mettre en place tout ça et comment l'utiliser !

L'exemple ci-dessous se base sur un Basic Template !

1 - Notre modèle

La première chose a faire est de créer notre modèle. Un utilisateur sera répresenté de la façon suivante :

public class User
    {
        public int Id { get; set; }
        public string Login { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
    }

Création du contexte et de l'initalizer

Maintenant que notre modèle est prêt, on passe a la création du contexte et de l'initializer !

public class UserContext : DbContext
    {
        public DbSet<User> Users { get; set; }

        public UserContext()
            :base("DefaultConnection")
        {
            
        }
    }

Concernant l'initializer, il va servir à créer notre base de donnée si elle n'existe pas

public class UserContextInitializer : DropCreateDatabaseIfModelChanges<UserContext>
    {
        protected override void Seed(UserContext context)
        {
            Roles.CreateRole(Settings.ADMIN);
            Roles.CreateRole(Settings.USER);
        }
    }

 Dans le global.asax on initialize notre bdd et on initialise la connection pour l'authentification

Database.SetInitializer(new UserContextInitializer());
            UserContext ctx = new UserContext();
            ctx.Database.Initialize(true);
            WebSecurity.InitializeDatabaseConnection("DefaultConnection", "Users", "Id", "Login", true);

Pour initialiser la gestion de l'authentification il suffit d'appeler WebSecurity.InitializeDatabaseConnection(...)
en fournissant la connection string, la table correspond à vos utilisateurs, la colonne Id de votre table et la colonne concernant les login. Dans mon cas, on retrouve Id et Login qui sont 2 propriétés de ma classe User. Le dernier paramètre permet de créer les tables necessaires pour la gestion des utilisateurs et roles.
J'en profite pour ajouter 2 rôles par défaut, Admin et User

PS : Pour utiliser WebSecurity, il faut référencer WebMatrix.WebData.dll et surtout ne pas oublier de mettre le copy local a true :) !

3 - Créer des comptes, se connecter, se déconnecter etc ...

Maintenant que notre bdd est prête, on est capable a travers toutes les méthodes présentes dans WebSecurity de gérer les utilisateurs et les roles. 

Voila toutes les méthodes à notre disposition, l'API est assez compléte, Changement de password, Validation d'utilisateur, Reset de password etc ...

Pour créer un compte, c'est extrémement simple, je vous épargne la partie vue ( vous pourrez jeter un coup d'oeil aux sources).

_context.Users.Add(new User()
                                  {
                                      Email = model.Email,
                                      FirstName = model.FirstName,
                                      LastName = model.LastName,
                                      Login = model.Login
                                  });
                _context.SaveChanges();

                WebSecurity.CreateAccount(model.Login, model.Password);
                Roles.AddUserToRole(model.Login, model.SelectedRole);
                WebSecurity.Login(model.Login, model.Password);

 

Soit vous sauvegardez independamment votre utilisateur et le compte gérant l'authentification avec WebSecurity.CreateAccount(..)
dans ce cas là on a juste à spécifier le login et le mdp (qui sera hasher une fois sauvegarder) ou alors on appelle WebSecurity.CreateUserAndAccount(...) et vous devez spécifier en plus un dictionnary avec les propriétés de votre user ! Si vous utilisez la 1ere methode, assurez d'enregistrer votre utilisateur en base avant d'appeler  WebSecurity.CreateAccount(...)

Roles.AddUserToRole(...) permet de rajouter notre utilisateur dans un groupe

WebSecurity.Login(...) pour authentifier notre utilisateur !


Plutôt simple non ? :)

SimpleMembershipProvider.rar (7.71 mb)

Comments (1) -

Nour Karoui
Nour Karoui said on Apr. 1 2013 at 19:20

Bonsoir,
j'espère que vous aurais mon message je suis actuellement en stage pfe je développe une application de gestion d'échange d'équipement et de matériel électronique avec Asp.net et une base de donnée oracle.
voila je voudrai s'avoir si c'est possible de convertir le login généré automatiquement avec le template Internet Application avec une base de donnée oracle au lieu de SQL Server.
Merci de votre attention j'espère avoir un repense rapide si vous voulais me contacté mon adresse mail est Karouinour@Gmail.com

cordialement Karoui Nour

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading