none
Visual Studio 2013 Web Forms CreateRole cria outra tabela de usuário RRS feed

  • 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
    AspNetUsersRoles

    O 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
    UsersInRoles

    Nã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?

    sexta-feira, 20 de dezembro de 2013 23:03

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
    quarta-feira, 8 de janeiro de 2014 23:51

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
    quarta-feira, 25 de dezembro de 2013 10:11
  • 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
    quarta-feira, 8 de janeiro de 2014 23:51
  • 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
    quarta-feira, 8 de janeiro de 2014 23:54