Click here to Skip to main content
Click here to Skip to main content

MySQL Membership, Role, Sitemap, Personalization Provider for ASP.NET 2.0

By , 7 Sep 2007
 

Introduction

This is the implementation of a Membership, Role, Sitemap, and Personalization provider of ASP.NET using MySQL as the backend database. This class uses the native net MySQL Connector version 5.1.2.

Background

This code is based on the work of J Snyman; he used ODBC to connect to MySQL. I modified it to use the native net MySQL Connector version 5.1.2.

Using the code

This is actually a C# class project. You only need to reference the compiled DLL output from this project in your Web project. You can use this even if the language in your web app is VB. The provided compiled DLL can be used right out of the box, but if you prefer, you can compile your own.

Using the providers is really easy.

  1. Create a new database on your MySQL server, e.g.: SimpleProviders.
  2. Execute the following SQL statement on the newly created database:
  3. CREATE TABLE 'personalization' (
    'username' varchar(255) default NULL,
    'path' varchar(255) default NULL,
    'applicationname' varchar(255) default NULL,
    'personalizationblob' blob
    );
    
    CREATE TABLE 'profiles' (
    'UniqueID' int(8) NOT NULL auto_increment,
    'Username' varchar(255) NOT NULL default '',
    'ApplicationName' varchar(255) NOT NULL default '',
    'IsAnonymous' tinyint(1) default '0',
    'LastActivityDate' datetime default NULL,
    'LastUpdatedDate' datetime default NULL,
    PRIMARY KEY ('UniqueID'),
    UNIQUE KEY 'PKProfiles' ('Username','ApplicationName'),
    UNIQUE KEY 'PKID' ('UniqueID')
    );
    
    CREATE TABLE 'roles' (
    'Rolename' varchar(255) NOT NULL default '',
    'ApplicationName' varchar(255) NOT NULL default '',
    PRIMARY KEY ('Rolename','ApplicationName')
    );
    
    CREATE TABLE 'sitemap' (
    'ID' int(11) NOT NULL auto_increment,
    'ApplicationName' varchar(255) NOT NULL default '',
    'Title' varchar(255) default NULL,
    'Description' text,
    'Url' text,
    'Roles' text,
    'Parent' int(11) default NULL,
    PRIMARY KEY ('ID')
    );
    
    CREATE TABLE 'users' (
    'PKID' varchar(255) NOT NULL default '',
    'Username' varchar(255) NOT NULL default '',
    'ApplicationName' varchar(255) NOT NULL default '',
    'Email' varchar(128) default NULL,
    'Comment' varchar(255) default NULL,
    'Password' varchar(128) NOT NULL default '',
    'FailedPasswordAttemptWindowStart' datetime default NULL,
    'PasswordQuestion' varchar(255) default NULL,
    'IsLockedOut' tinyint(1) default '0',
    'PasswordAnswer' varchar(255) default NULL,
    'FailedPasswordAnswerAttemptCount' int(8) default '0',
    'FailedPasswordAttemptCount' int(8) default '0',
    'IsApproved' tinyint(1) NOT NULL default '0',
    'FailedPasswordAnswerAttemptWindowStart' datetime default NULL,
    'LastActivityDate' datetime default NULL,
    'IsOnLine' tinyint(1) default '0',
    'CreationDate' datetime default NULL,
    'LastPasswordChangedDate' datetime default NULL,
    'LastLockedOutDate' datetime default NULL,
    'LastLoginDate' datetime default NULL,
    PRIMARY KEY ('PKID'),
    UNIQUE KEY 'PKID' ('PKID'),
    KEY 'PKID_2' ('PKID'),
    KEY 'usr' ('Username')
    );
    
    CREATE TABLE 'usersinroles' (
    'Username' varchar(255) NOT NULL default '',
    'Rolename' varchar(255) NOT NULL default '',
    'ApplicationName' varchar(255) NOT NULL default '',
    PRIMARY KEY ('Username','Rolename','ApplicationName')
    );

    There is a SQL file named DBStructure.sql included with the source code zip file that contains the code above.

  4. Open Visual Studio and create a new Website Project.
  5. Add a reference to Simple.Providers.MySQL.dll.
  6. Make the following changes to your web.config file:
    1. Add the connection string to your newly created database to the connectionStrings section:
    2. <add 
        connectionString="server=localhost;database=simpleproviders;
                          user id=<put user>;pwd=<put password>" 
        name="SimpleProviderconnectionstring" 
        providerName="MySql.Data.MySqlClient"/>

      * Please replace the {Your username} and {Your password} entries in the connection string with your own values.

    3. Under the <system.web> section, add the following:
    4. <siteMap defaultProvider="siteMapProvider" enabled="true">
        <providers>
          <clear />
           <add name="siteMapProvider" 
             type="Simple.Providers.MySQL.MysqlSiteMapProvider" 
             connectionStringName="SimpleProviderConnectionString" 
             applicationName="{Your App Name}" 
             description="MySQL site map provider" 
             securityTrimmingEnabled="true"/>
        </providers>
      </siteMap>
      <roleManager defaultProvider="roleProvider" enabled="true" 
             cacheRolesInCookie="false" cookieName=".ASPROLES" 
             cookieTimeout="7200" cookiePath="/" cookieRequireSSL="false" 
             cookieSlidingExpiration="true" cookieProtection="All">
        <providers>
        <clear />
        <add name="roleProvider" 
          type="Simple.Providers.MySQL.MysqlRoleProvider" 
          connectionStringName="SimpleProviderConnectionString" 
          applicationName="{Your App Name}" 
          description="MySQL role provider"/>
        </providers>
      </roleManager>
      <membership defaultProvider="membershipProvider" 
            userIsOnlineTimeWindow="15">
        <providers>
        <clear />
        <add name="membershipProvider" 
          type="Simple.Providers.MySQL.MysqlMembershipProvider" 
          connectionStringName="SimpleProviderConnectionString" 
          applicationName="{Your App Name}" 
          enablePasswordRetrieval="true" enablePasswordReset="true" 
          requiresQuestionAndAnswer="true" 
          requiresUniqueEmail="true" passwordFormat="Encrypted" 
          minRequiredPasswordLength="6" 
          minRequiredNonalphanumericCharacters="0" 
          description="MySQL membership provider"/>
        </providers>
      </membership>
      <profile defaultProvider="profileProvider" 
              automaticSaveEnabled="true">
        <providers>
        <clear />
        <add name="profileProvider" 
          type="Simple.Providers.MySQL.MysqlProfileProvider" 
          connectionStringName="SimpleProviderConnectionString" 
          applicationName="{Your App Name}" 
          description="MySQL Profile Provider"/>
        </providers>
        <properties>
        <clear />
          <!--
            Add any needed attributes for profiles here.
            eg. <add name="Theme" type="System.String" 
            defaultValue="Default"/>
          -->
        </properties>
      </profile>
      <webParts>
        <personalization defaultProvider="personalizationProvider">
        <providers>
          <clear />
          <add name="personalizationProvider" 
             type="Simple.Providers.MySQL.MysqlPersonalizationProvider" 
             connectionStringName="{Your Connection String Name}" 
             applicationName="{Your App Name}" 
             description="MySQL Personalization Provider/>
          </providers>
        </personalization>
      </webParts>

      Please replace the {Your App Name} instances with a valid application name. The application name should not contain any spaces or special characters.

  7. Everything should be set up correctly now.

Continue with the rest of your project and make sure to make use of the features provided by the above mentioned providers.

History

  • 9/7/2007 - Uses the MySQL Net Connector 5.1.2 instead of ODBC.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

onrac
Web Developer
Philippines Philippines
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Generalhelp me remove this error.membervirus232 Feb '10 - 1:25 
QuestionHow do the Simple Providers recognize the current version of MySQL Connector DrivermemberLuizItatiba8 Sep '09 - 17:34 
QuestionRe: WebpartsmemberMember 41156042 Apr '09 - 13:27 
QuestionHow CurrentNodes and accented with spaces in SiteMapPath? For example São Paulo-SP.memberLuizItatiba22 Oct '08 - 9:25 
QuestionHow to correctly set the standard MemberShipProvider Provider of the SqlServer2005 to work together with the MySqlSiteMapProvider?memberLuizItatiba8 Oct '08 - 6:26 
QuestionHow can I use same database for more than one application?memberUmut TURER2 Sep '08 - 6:39 
QuestionCan someone provide the same example with some aspx pages.....memberMember 358658015 Jul '08 - 23:20 
GeneralgoodmemberDidier Stmedar4 Jul '08 - 3:33 
QuestionFail to test to the provider in the Asp.net ConfigurationmemberCGARRIGOS20 May '08 - 1:54 
QuestionHow to Order Alphabetically by the children MySqlSiteMapProvider usmemberLuizItatiba1 Apr '08 - 16:30 
QuestionAs Custom Menus of MYSQLSITEMAPPROVIDER, based on profiles or rolesmemberLuizItatiba1 Apr '08 - 9:24 
QuestionError Tool Administration of Site or ASP.NET ConfigurationmemberLuizItatiba1 Apr '08 - 8:57 
QuestionError WebConfigmemberLuizItatiba31 Mar '08 - 10:18 
QuestionUsing the driver MySqlConnector 5.0 instead of 5.1.2memberLuizItatiba26 Mar '08 - 12:44 
GeneralGeneral CommentsmvpJohn Simmons / outlaw programmer19 Jan '08 - 4:33 
QuestionODBC still present in the MysqlPersonalizationProvider.csmemberLisburn Lad8 Jan '08 - 4:01 
AnswerRe: ODBC still present in the MysqlPersonalizationProvider.csmemberluciano vilela26 May '10 - 4:20 
GeneralImplementation ExamplememberCreativeGolf19 Oct '07 - 5:54 
Generaljust Notememberibyasmo30 Sep '07 - 10:45 
QuestionERROR MESSAGE - SECURITYmemberKanedogg17 Sep '07 - 7:48 
AnswerRe: ERROR MESSAGE - SECURITY [modified]memberonrac17 Sep '07 - 17:18 
GeneralRe: ERROR MESSAGE - SECURITYmemberKanedogg18 Sep '07 - 0:47 
Man the machine key worked greatbut that gave me another total error.. Anyhow i have totally rebuilt a new project as i worried about the whole project. I now have re-installed my connector.msi and with the new project i get :
*********************************************************
Error in application:
Configuration Error
 
Parser Error Message: Could not load file or assembly 'MySql.Data, Version=5.0.8.1, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The system cannot find the file specified.
 
Source Error:
 

Line 88:
Line 89:
Line 90:
Line 92:

********************************************************
 
i think it's because the HOST itself is not have installed the connector .NET drivers or application ?!?!
 
please advise WTF | :WTF:
 
cheers
 
" i'm mediocre on ASP & .NET but i'll help if & where i can."

QuestionRe: MySQL Membership, Role Provider [modified]memberFuzziebrain13 Sep '07 - 15:23 
AnswerRe: MySQL Membership, Role Providermemberonrac17 Sep '07 - 17:20 
Generalgood effortmemberlxwde10 Sep '07 - 14:52 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130523.1 | Last Updated 8 Sep 2007
Article Copyright 2007 by onrac
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid