[SharePoint] SqlMembershipProvider.CreateUser y el maldito MembershipCreateStatus.InvalidAnswer

En una aplicación sobre SharePoint 2010 con SqlMembership Provider (Claims) me he encontrado que a la hora de crear un usuario en la página de registro, me mostraba siempre un error que me decía que la pregunta y respuesta no son válidas. Revisando la configuración del MembershipProvider en el web.config he visto que la opción de requerir pregunta y respuesta no estaba deshabilitada:

<membership defaultProvider="i">

    <providers>

        <add name="i" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider" .../>

        <add connectionStringName="FBAConnectionString" 

             passwordAttemptWindow="5" 

             enablePasswordRetrieval="true" 

             enablePasswordReset="false" 

             requiresQuestionAndAnswer="false" 

             applicationName="/" 

             requiresUniqueEmail="true" 

             passwordFormat="Hashed" 

             description="Stores and Retrieves membership data from SQL Server" 

             name="MembershipProvider" 

             type="System.Web.Security.SqlMembershipProvider..." />

    </providers>

</membership>

 
y aún así seguía requeriendola en el método CreateUser:
 
sqlProvider.CreateUser(UserNameTextBox.Text, 

                       PasswordTextBox.Text, 

                       UserNameTextBox.Text, 

                       String.Empty, 

                       String.Empty, 

                       true, 

                       Guid.NewGuid(), 

                       out status);

 

¿Cual es entonces el problema?

Pues si leemos la documentación de la msdn, nos dice claramente que para estos 2 parámetros tenemos que pasar el valor null si queremos que no los tenga en cuenta, si le pasamos el valor String.Empty no tiene en cuenta la configuración del web.config y lo trata como que es requerida y claro está que podría hacer caso de la configuración del Membership del web.config primero. Así pues para que funcione pasamos null:

sqlProvider.CreateUser(UserNameTextBox.Text, 

                       PasswordTextBox.Text, 

                       UserNameTextBox.Text, 

                       null, 

                       null, 

                       true, 

                       Guid.NewGuid(), 

                       out status);

Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *