¿Cómo puedo crear una cuenta de usuario en mi tabla de usuario utilizando migraciones de Entity Framework?

StackOverflow https://stackoverflow.com/questions/9326115

Pregunta

Anteriormente, utilicé un inicializador de base de datos para semillas o prepoble mis tablas al crearlas primero usando el código. Todo esto funcionó muy bien, pero quería pasar a usar las migraciones EF 4.3.

Actualicé a EF 4.3 en mi proyecto y eliminé el código de inicializador de la base de datos y lo puse dentro del método de semillas en el archivo Configuration.cs de migraciones. Todo esto funciona bien para mí para prepopular mis tablas, excepto cuando quiero sembrar a un usuario predeterminado en mi tabla de usuario.

Utilizo el siguiente código dentro de mi método de semilla: (actualmente esto no utiliza el código AddorUpdate, ya que no estoy seguro de cómo usarlo para esta situación, de ahí la verificación del nombre de usuario)

        // create default User
        MembershipCreateStatus status = new MembershipCreateStatus();
        User admin = context.Users.Find("TestGuy");
        if (admin == null)
        {
            Membership.CreateUser("TestGuy", "TestGuy123", "testguy@test.com");
            if (status == MembershipCreateStatus.Success)
            {
                admin.Firstname = "Test";
                admin.Surname = "Guy";
                admin.DateLastActivity = DateTime.Now;
                admin.LastActivityRoute = "/Home/Index";
                Role adminRole = context.Roles.Find("Administrator");
                admin.Roles = new List<Role>();
                admin.Roles.Add(adminRole);
            }
        }

Cuando intento ejecutar la database de actualización, recibo este error:

The password-answer supplied is invalid.

Creo que esto se debe a cómo llamo al createuser, pero parece que no puedo averiguar cómo evitar este error. He intentado poner solo nulos para la pregunta y la respuesta de seguridad, pero eso no parece funcionar.

¿Alguien tiene un ejemplo de sembrar a un usuario que usa la opción 'AddorUpdate'?

Editar 1:

Según uno de los comentarios a continuación, estoy usando Altairis Security Toolkit para administrar mi membresía. Mi web.config está configurado de la siguiente manera:

<membership defaultProvider="TableMembershipProvider">
  <providers>
    <clear />
    <add name="TableMembershipProvider" type="Altairis.Web.Security.TableMembershipProvider, Altairis.Web.Security" connectionStringName="DataContext" minRequiredPasswordLength="8" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" minRequiredNonAlphanumericCharacters="0" passwordStrengthRegularExpression="" />
  </providers>
</membership>

Editar 2:

También he puesto esto como un boleto abierto en el foro de Altairis.http://altairiswebsecurity.codeplex.com/workitem/32273

Editar 3:

Para que esto funcione sin ningún error, tuve que configurar mi código de la siguiente manera:

        // create default User
        MembershipCreateStatus status = new MembershipCreateStatus();
        User admin = context.Users.Find("TestGuy");
        if (admin == null)
        {
            Membership.CreateUser("TestGuy", "TestGuy123", "testguy@test.com", null, null, true, out status);
            if (status == MembershipCreateStatus.Success)
            {
                admin = context.Users.Find("TestGuy");
                admin.Firstname = "Test";
                admin.Surname = "Guy";
                admin.DateLastActivity = DateTime.Now;
                admin.LastActivityRoute = "/Home/Index";
                Role adminRole = context.Roles.Find("Administrator");
                admin.Roles = new List<Role>();
                admin.Roles.Add(adminRole);
            }
        }

Lo anterior se compilará ahora cuando se ejecute Update-Database, pero no se genera un nuevo usuario. Si alguien tiene sugerencias para probar, ¡sería genial!

Gracias,

Rico

¿Fue útil?

Solución 2

Al investigar un poco sobre este tema, se ha vuelto evidente que la siembra del usuario debe crearse fuera de la lógica de semillas de migraciones, ¡al menos por ahora hasta que hagan que sea más fácil de hacerlo!

Como trabajo, seguí el ejemplo de esta pregunta de StackOverflow (La mejor manera de sembrar los datos incrementales en Entity Framework 4.3) para hacer manualmente mi nuevo usuario al inicio fuera del archivo de configuración de migraciones.

No es ideal, al menos para mí, ya que todos los datos de 'inicio' no están en un área, pero hace el trabajo y no es tan difícil de seguir.

Otros consejos

Creo que su membresía está configurada para requerir preguntas y respuesta. ¿Ha intentado poner un cheque en "if (membresía.RequiresquestionAndanswer)" y vea de qué manera se ramifica.

Para el administrador: Por cierto, quería publicar esto primero como comentario, ya que fui marcado la última vez cuando usé una respuesta, pero no veo ninguna opción aquí para agregar comentarios, solo respuestas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top