Social Icons

lunes, 26 de octubre de 2009

Creación de usuarios de FBA programáticamente

El otro día tuve que hacer una instalación de un FBA y se me ocurrió que no tenía ganas de usar el asistente de Visual Studio eso o que no tenía un Visual Studio a mano… total que se me metió en la cabeza que debía de ser facilísimo crear los usarios programáticamente. Claro, desde el portal no tiene ningún secreto, pero yo lo que quería era hacerlo desde una aplicación de consola.

Al final,como siempre, no me resultó trivial pese a ser facilísimo, y como no lo tengo subido al TFS y yo soy de los que se olvidan de este tipo de cosas, lo subo al blog.

El main no tiene ninguna complicación, se crea el usuario con un Membership.CreateUser y ser recoge el resultado de la operacion en un MembershipCreateStatue, así:


static void Main(string[] args)
{
System.Web.Security.MembershipCreateStatus Creado;
System.Web.Security.Membership.CreateUser(args[0], args[1], args[2],
Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), true, out Creado);

Console.WriteLine(Creado.ToString());
Console.ReadKey();
}

Claro, qué fáci :) pero ¿cómo sabe el Membership a dónde apuntar? pues se lo tenemos que decir añadiendo a nuestra solución un “Archivo de Configuración de Aplicación”. Yo como soy tremendamente original lo llamé App.config.


Y en este fichero .config es donde tenemos que definir todos los datos de nuestro Membership Provider. Para regocijo de todos, se puede sacar la configuración directamente desde el web.config de la aplicacion web donde tenemos montado la infraestructura del Form Based Authentication. Os pego una copia esquemática de lo que hay que añadir:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="NOMBREDELACONEXION" connectionString="server=INSTANCIA;database=BASEDEDATOS;Trusted_Connection=true" />
</connectionStrings>
<system.web>
<membership defaultProvider="NOMBERDELMEMBERSHIPPROVIDER">
<providers>
<add connectionStringName="NOMBREDELACONEXION" applicationName="/"
name="NOMBERDELMEMBERSHIPPROVIDER"
type="CLASE, ASSEMBLY, Version=X.X.X.X, Culture=neutral, PublicKeyToken=KEY" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="NOMBREDELROLEPROVIDER">
</roleManager>
</system.web>
</configuration>

Y con esto ya funciona mágicamente.


Suerte!

No hay comentarios: