Accueil

User et Role MVC4 dans SQL Server

by Jean-Camille Mercier 28. août 2012 15:36

J'ai commencé mon premier projet MVC4 il y a quelques semaines. C'est l'occasion de découvrir notre nouvel EDI VS2012 mais surtout les nouveautés relatives au framework 4.5 que je ne manquerais pas détailler dans un prochain post. Pour l'instant voici une astuce pour enregistrer vos utilisateurs dans une base SQL Serveur au lieu d'une SQL Express "LocalDB".

Ce qu'il faut déjà savoir c'est que le système d'identification par défaut a changé, il ne s'appuie plus sur l'ASP.Net Configuration. Donc à la place des nombreuses tables "aspnet_" nous avons maintenant un système plus simple avec 5 tables autour de : User, Role et Membership. La méthode d'accès aussi a changée car la base est maintenant accédée en Entity Framework ce qui permet, au moment de la première connexion, que les tables soient automatiquement crées depuis le model.

La gestion des utilisateurs est ensuite confiée à l'objet "WebMatrix.WebData.WebSecurity" qui possède les taches de bases relatives à l'authentification :

WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
WebSecurity.Login(model.UserName, model.Password);
WebSecurity.ChangePassword(User.Identity.Name, OldPwd, NewPwd);
WebSecurity.Logout();
// etc... et surtout :
WebSecurity.InitializeDatabaseConnection("MyConnection", 
"UserProfile", "UserId", "UserName", autoCreateTables: true);

 C'est grâce à cette dernière méthode que l'on va pouvoir switcher vers notre base SQL Server car l'on voit que le premier paramètre pointe vers une chaine de connexion. Par défaut c'est donc une accès vers une base LocalDB :

<add name="MyConnection" Integrated Security=SSPI;
connectionString="Data Source=(LocalDb)\v11.0;
Initial Catalog=aspnet-MvcApplication1-20120822161914;
AttachDBFilename=|DataDirectory|\aspnet-MvcTest-20120821914.mdf" 
providerName="System.Data.SqlClient" />

 Il faut attaquer votre serveur SQL et ne pas oublier de mettre MultipleActiveResultSets=True

<add name="MyConnection" Integrated Security=SSPI;
connectionString="Data Source=localhost;
Initial Catalog=TestDb; MultipleActiveResultSets=True;" 
providerName="System.Data.SqlClient" />

 La dernière chose qui reste à modifier c'est le provider d'accès à la base, il vous faut ceux de SQL Server au lieu de LocalDB. Il faudra donc ajouter la référence "System.Web.Providers" ou installer le package du même nom avec NuGet :

PM> Install-Package System.Web.Providers

 Voilà pour une utilisation basique de la nouvelle authentification MVC4.