martes, 30 de junio de 2015

Membership Provider PostgresSQL‬

Usaremos NauckIT.PostgreSQLProvider

Primero necesitamos descargar  NuGet Package para que se integre a nuestra solución. Para esto lo primero que debemos hacer es correr el siguiente comando en la consola de administración de paquetes.
en el visual estudio. Herramientas/consola de administración de paquetes.

Package Manager Console in menu

si no tienen esa opción tendrán que intalarlo.

A mi se me intalo cuando medescargue la extensión NuGet Package.

En el visual studio se van a Herramientas/Administrador de  Extenciones y se descargan de la galeria en linea. Nuget Package Manager 


Una ves que ya tengan la consola de  administrador de paquetes. sino les aparecera así tambien como en mi caso.

ahora si ya en la consola escribimos esto

PM> Install-Package NauckIT.PostgreSQLProvider

y en nustra solucion aparecerá una carpeta llamada Bin


ojo si nos les funciona:

(si ya siguieron todos los pasos y cuando quieren agregar roles o usuarios y les sale un error como este: No se puede cargar el archivo o ensamblado 'Npgsql, Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' ni una de sus dependencias. La definición del manifiesto del ensamblado no coincide con la referencia al ensamblado. (Excepción de HRESULT: 0x80131040)

esto se debe por la versión del Npgsql se van a la siguiente pagina
y buscan la versión. por ejemplo a mi me dio un error y le ejecute el siguiente codigo en la consola

PM> Install-Package Npgsql -Version 2.0.12.1
 o prueban la versión hasta que les funcione )


abrimos el cmd en windows y ejecutamos el siguiente comando.

@echo off
cls
.paket\paket.bootstrapper.exe
if errorlevel 1 (
exit /b %errorlevel%
)
.paket\paket.exe restore
if errorlevel 1 (
exit /b %errorlevel%
)
IF NOT EXIST build.fsx (
.paket\paket.exe update
packages\FAKE\tools\FAKE.exe init.fsx
)
packages\FAKE\tools\FAKE.exe build.fsx %*

El script para la base de datos de PostgresSQL nos genera automaticamente.

para encontrarla ponemos en buscar en nuestro pc: DatabaseSchema.sql para que nos encuentre.

lo ejecutamos en Postgres y ya tendriamos la Base de Datos Membership en Postgres

si no encuentran les dejo es esquema de la base de datos Membership en Postgres.




-- PostgreSQL 8 Membership Provider Schema

CREATE TABLE "Users" (
"pId" character(36) NOT NULL,
"Username" character varying(255) NOT NULL,
"ApplicationName" character varying(255) NOT NULL,
"Email" character varying(128) NULL,
"Comment" character varying(128) NULL,
"Password" character varying(255) NOT NULL,
"PasswordQuestion" character varying(255) NULL,
"PasswordAnswer" character varying(255) NULL,
"IsApproved" boolean NULL, 
"LastActivityDate" timestamptz NULL,
"LastLoginDate" timestamptz NULL,
"LastPasswordChangedDate" timestamptz NULL,
"CreationDate" timestamptz NULL, 
"IsOnLine" boolean NULL,
"IsLockedOut" boolean NULL,
"LastLockedOutDate" timestamptz NULL,
"FailedPasswordAttemptCount" integer NULL,
"FailedPasswordAttemptWindowStart" timestamptz NULL,
"FailedPasswordAnswerAttemptCount" integer NULL,
"FailedPasswordAnswerAttemptWindowStart" timestamptz NULL,
CONSTRAINT users_pkey PRIMARY KEY ("pId"),
CONSTRAINT users_username_application_unique UNIQUE ("Username", "ApplicationName")
);

CREATE INDEX users_email_index ON "Users" ("Email");
CREATE INDEX users_islockedout_index ON "Users" ("IsLockedOut");

-- PostgreSQL 8 Role Provider Schema

CREATE TABLE "Roles" (
"Rolename" character varying(255) NOT NULL,
"ApplicationName" character varying(255) NOT NULL,
CONSTRAINT roles_pkey PRIMARY KEY ("Rolename", "ApplicationName")
);

CREATE TABLE "UsersInRoles" (
"Username" character varying(255) NOT NULL,
"Rolename" character varying(255) NOT NULL,
"ApplicationName" character varying(255) NOT NULL,
CONSTRAINT usersinroles_pkey PRIMARY KEY ("Username", "Rolename", "ApplicationName"),
CONSTRAINT usersinroles_username_fkey FOREIGN KEY ("Username", "ApplicationName") REFERENCES "Users" ("Username", "ApplicationName") ON DELETE CASCADE,
CONSTRAINT usersinroles_rolename_fkey FOREIGN KEY ("Rolename", "ApplicationName") REFERENCES "Roles" ("Rolename", "ApplicationName") ON DELETE CASCADE
);

-- PostgreSQL 8 Profile Provider Schema

CREATE TABLE "Profiles" (
"pId" character(36) NOT NULL,
"Username" character varying(255) NOT NULL,
"ApplicationName" character varying(255) NOT NULL,
"IsAnonymous" boolean NULL,
"LastActivityDate" timestamptz NULL,
"LastUpdatedDate" timestamptz NULL,
CONSTRAINT profiles_pkey PRIMARY KEY ("pId"),
CONSTRAINT profiles_username_application_unique UNIQUE ("Username", "ApplicationName"),
CONSTRAINT profiles_username_fkey FOREIGN KEY ("Username", "ApplicationName") REFERENCES "Users" ("Username", "ApplicationName") ON DELETE CASCADE
);

CREATE INDEX profiles_isanonymous_index ON "Profiles" ("IsAnonymous");

CREATE TABLE "ProfileData" (
"pId" character(36) NOT NULL,
"Profile" character(36) NOT NULL,
"Name" character varying(255) NOT NULL,
"ValueString" text NULL,
"ValueBinary" bytea NULL,
CONSTRAINT profiledata_pkey PRIMARY KEY ("pId"),
CONSTRAINT profiledata_profile_name_unique UNIQUE ("Profile", "Name"),
CONSTRAINT profiledata_profile_fkey FOREIGN KEY ("Profile") REFERENCES "Profiles" ("pId") ON DELETE CASCADE
);

-- PostgreSQL 8 Session-Store Provider Schema

CREATE TABLE "Sessions" (
"SessionId" character varying(80) NOT NULL,
"ApplicationName" character varying(255) NOT NULL,
"Created" timestamptz NOT NULL,
"Expires" timestamptz NOT NULL,
"Timeout" integer NOT NULL,
"Locked" boolean NOT NULL,
"LockId" integer NOT NULL,
"LockDate" timestamptz NOT NULL,
"Data" text NULL,
"Flags" integer NOT NULL,
CONSTRAINT sessions_pkey PRIMARY KEY ("SessionId", "ApplicationName")
);



los archivos de configuracion del web.config son:


<?xml version="1.0" encoding="utf-8"?>
<!--
  Para obtener más información sobre cómo configurar la aplicación de ASP.NET, visite
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->





<configuration>

  <connectionStrings>
    <clear />
    <add name="AspSQLProvider" connectionString="Server=127.0.0.1;Port=5432;Database=MemberShipASPNET;User Id=postgres;Password=jaime;Encoding=UNICODE;Sslmode=Prefer;Pooling=true;" />
  </connectionStrings>
  
<system.web>

    <authentication mode="Forms">
      <forms name=".AspNetAuth" protection="All" defaultUrl="~/Default.aspx" loginUrl="~/Login.aspx" timeout="30" path="/" requireSSL="false" slidingExpiration="true" enableCrossAppRedirects="false" />
    </authentication>

    <machineKey validationKey="518A9D0E650ACE4CB22A35DA4563315098A96D0BB8E357531C7065D032099214A11D1CA074B6D66FF0836B35CEAAD0E7EEEFAED772754832E0A5F94EF8522222" decryptionKey="DB5660C109E9EC70F044BA1FED99DE0C5922321C5125E84C23A1B5CA0E426909" validation="SHA1" decryption="AES" />

    <membership defaultProvider="PgMembershipProvider">
      <providers>
        <clear />
        <add name="PgMembershipProvider" type="NauckIT.PostgreSQLProvider.PgMembershipProvider" connectionStringName="AspSQLProvider" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" passwordFormat="Hashed" applicationName="WebSite1" />
      </providers>
    </membership>

    <roleManager enabled="true" defaultProvider="PgRoleProvider" cacheRolesInCookie="true" cookieName=".AspNetRoles" cookiePath="/" cookieProtection="All" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="false" cookieTimeout="30" maxCachedResults="25">
      <providers>
        <clear />
        <add name="PgRoleProvider" type="NauckIT.PostgreSQLProvider.PgRoleProvider" connectionStringName="AspSQLProvider" applicationName="Maquetado" />
      </providers>
    </roleManager>

    <profile enabled="true" defaultProvider="PgProfileProvider">
      <providers>
        <clear />
        <add name="PgProfileProvider" type="NauckIT.PostgreSQLProvider.PgProfileProvider" connectionStringName="AspSQLProvider" applicationName="Maquetado" />
      </providers>
      <properties>
        <add name="FirstName" />
        <add name="LastName" />
      </properties>
    </profile>

    <!--<sessionState   mode="Custom"   customProvider="PgSessionStateStoreProvider">
      <providers>
        <clear/>
        <add name="PgSessionStateStoreProvider" type="NauckIT.PostgreSQLProvider.PgSessionStateStoreProvider" enableExpiredSessionAutoDeletion="true" expiredSessionAutoDeletionInterval="60000" enableSessionExpireCallback="false" connectionStringName="AspSQLProvider" applicationName="Maquetado" />
      </providers>
    </sessionState>-->
    
<compilation debug="true" targetFramework="4.0" />
    <pages styleSheetTheme="Temas"></pages>
</system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.11.0" newVersion="2.0.11.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>











No hay comentarios:

Publicar un comentario