Usuário com melhor resposta
Visual Studio 2013 Web Forms CreateRole cria outra tabela de usuário

Pergunta
-
Caros amigos, segue minha dificuldade referente ao Visual Studio 2013 utilizando Asp.Net C#
Ao criar um projeto ASP.NET Web Application no Visual Studio 2013, selecionei Web Forms e mantive o tipo de autenticação como Individual User Accounts. Sem inserir nenhum código efetuei o primeiro debug e registrei um novo usuário, com esta ação automaticamente foi criado um banco de dados sendo que dentre as tabelas criadas constam estas:
AspNetUsers
AspNetRoles
AspNetUsersRolesO usuário que registrei encontra-se na tabela AspNetUsers. Feito isto consigo logar no site normalmente com este ou qualquer usuário que crio (Até aqui ok).
Hoje estou no final do desenvolvimento do meu site, apenas preciso vincular um usuário a um role.
Sendo assim no arquivo Global.asax.cs inseri o seguinte código:
// Cria o Role Administrador if (!Roles.RoleExists("Administrador")) Roles.CreateRole("Administrador"); if (Membership.GetUser("Admin") == null) { //Cria o Usuário Admin Membership.CreateUser("Admin", "Admin123456", "admin.meusite@hotmail.com"); //Vincula o usuário ao role Roles.AddUserToRole("Admin", "Administrador"); }
Agora vem o problema, ao tentar logar no site com o usuário Admin recebo a mensagem Invalid username or password.
Verifiquei no banco de dados e o usuário foi sim cadastrado porém em novas tabelas:
Users
Roles
UsersInRolesNão consigo logar no site porque obviamente o login busca os usuários na tabela AspNetUsers, e não nesta nova tabela Users, o que devo fazer?
Respostas
-
Achei um trecho de código que é exatamente o que estava precisando, segue para quem também estava com a mesma dúvida:
internal void createAdmin() { // Access the application context and create result variables. Models.ApplicationDbContext context = new ApplicationDbContext(); IdentityResult IdRoleResult; IdentityResult IdUserResult; // Create a RoleStore object by using the ApplicationDbContext object. // The RoleStore is only allowed to contain IdentityRole objects. var roleStore = new RoleStore<IdentityRole>(context); // Create a RoleManager object that is only allowed to contain IdentityRole objects. // When creating the RoleManager object, you pass in (as a parameter) a new RoleStore object. var roleMgr = new RoleManager<IdentityRole>(roleStore); // Then, you create the "Administrator" role if it doesn't already exist. if (!roleMgr.RoleExists("Administrator")) { IdRoleResult = roleMgr.Create(new IdentityRole("Administrator")); if (!IdRoleResult.Succeeded) { // Handle the error condition if there's a problem creating the RoleManager object. } } // Create a UserManager object based on the UserStore object and the ApplicationDbContext // object. Note that you can create new objects and use them as parameters in // a single line of code, rather than using multiple lines of code, as you did // for the RoleManager object. var userMgr = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); var appUser = new ApplicationUser() { UserName = "Admin", }; IdUserResult = userMgr.Create(appUser, "Pa$$word"); // If the new "Admin" user was successfully created, // add the "Admin" user to the "Administrator" role. if (IdUserResult.Succeeded) { IdUserResult = userMgr.AddToRole(appUser.Id, "Administrator"); if (!IdUserResult.Succeeded) { // Handle the error condition if there's a problem adding the user to the role. } } else { // Handle the error condition if there's a problem creating the new user. } }
- Marcado como Resposta Giovani Cr quarta-feira, 22 de janeiro de 2014 10:30
Todas as Respostas
-
Bom dia,
De uma olhada nesse link, acho que é oque você procura: http://stackoverflow.com/questions/2054973/asp-net-mvc-authentication-using-custom-database-instead-of-aspnetdb
Att,
Giovani Cruzara – Microsoft Contingent Staff
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.
Msdn Community Support
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.- Marcado como Resposta Giovani Cr quinta-feira, 26 de dezembro de 2013 11:25
- Não Marcado como Resposta KaioKmit quarta-feira, 8 de janeiro de 2014 23:51
-
Achei um trecho de código que é exatamente o que estava precisando, segue para quem também estava com a mesma dúvida:
internal void createAdmin() { // Access the application context and create result variables. Models.ApplicationDbContext context = new ApplicationDbContext(); IdentityResult IdRoleResult; IdentityResult IdUserResult; // Create a RoleStore object by using the ApplicationDbContext object. // The RoleStore is only allowed to contain IdentityRole objects. var roleStore = new RoleStore<IdentityRole>(context); // Create a RoleManager object that is only allowed to contain IdentityRole objects. // When creating the RoleManager object, you pass in (as a parameter) a new RoleStore object. var roleMgr = new RoleManager<IdentityRole>(roleStore); // Then, you create the "Administrator" role if it doesn't already exist. if (!roleMgr.RoleExists("Administrator")) { IdRoleResult = roleMgr.Create(new IdentityRole("Administrator")); if (!IdRoleResult.Succeeded) { // Handle the error condition if there's a problem creating the RoleManager object. } } // Create a UserManager object based on the UserStore object and the ApplicationDbContext // object. Note that you can create new objects and use them as parameters in // a single line of code, rather than using multiple lines of code, as you did // for the RoleManager object. var userMgr = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); var appUser = new ApplicationUser() { UserName = "Admin", }; IdUserResult = userMgr.Create(appUser, "Pa$$word"); // If the new "Admin" user was successfully created, // add the "Admin" user to the "Administrator" role. if (IdUserResult.Succeeded) { IdUserResult = userMgr.AddToRole(appUser.Id, "Administrator"); if (!IdUserResult.Succeeded) { // Handle the error condition if there's a problem adding the user to the role. } } else { // Handle the error condition if there's a problem creating the new user. } }
- Marcado como Resposta Giovani Cr quarta-feira, 22 de janeiro de 2014 10:30
-
Obrigado pela ajuda, mas este como muitos outros links apenas mostram como criar uma área de registro do zero, minha dúvida era apenas como aproveitar o código já gerado pelo Visual Studio. Mas já achei a solução conforme código acima =D
- Editado KaioKmit sexta-feira, 24 de janeiro de 2014 23:22