[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.

Published 8/3/2012 8:34 por Luis Ruiz Pavón
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2012/03/08/sharepoint-sqlmembershipprovider-createuser-y-el-maldito-membershipcreatestatus-invalidanswer.aspx