Skip to main content
Email Password   helpLost your password?

Introduction

This article provides two files that contain a Membership provider and a Role provider for ASP.NET v2.0.

Microsoft provides a Membership provider in the framework but only for SQL Server. The class does not seem to work for MySQL so I decided to write a new provider from the ODBC provider sample code included in the framework SDK.

How to use it

To use these classes, you will need the latest MySQL .NET Connector. You might need to recompile it with the new C# compiler for v2.0 (but the new framework should normally support v1.0 or 1.1 assemblies).

  1. Create the tables (note that these SQL commands might not work with MySQL 4).
    CREATE TABLE Roles
    (
      Rolename Varchar (255) NOT NULL,
      ApplicationName varchar (255) NOT NULL
    )
    
    CREATE TABLE UsersInRoles
    (
      Username Varchar (255) NOT NULL,
      Rolename Varchar (255) NOT NULL,
      ApplicationName Text (255) NOT NULL
    )
    ALTER TABLE 'usersinroles' 
          ADD INDEX ( 'Username', 'Rolename', 'ApplicationName') ;
    ALTER TABLE 'roles' ADD INDEX ( 'Rolename' , 'ApplicationName' ) ;
    
    CREATE TABLE 'users' (
      'PKID' varchar(36) collate latin1_general_ci NOT NULL default '',
      'Username' varchar(255) collate latin1_general_ci NOT NULL default '',
      'ApplicationName' varchar(100) 
                        collate latin1_general_ci NOT NULL default '',
      'Email' varchar(100) collate latin1_general_ci NOT NULL default '',
      'Comment' varchar(255) collate latin1_general_ci default NULL,
      'Password' varchar(128) collate latin1_general_ci NOT NULL default '',
      'PasswordQuestion' varchar(255) collate latin1_general_ci default NULL,
      'PasswordAnswer' varchar(255) collate latin1_general_ci default NULL,
      'IsApproved' tinyint(1) default NULL,
      'LastActivityDate' datetime default NULL,
      'LastLoginDate' datetime default NULL,
      'LastPasswordChangedDate' datetime default NULL,
      'CreationDate' datetime default NULL,
      'IsOnLine' tinyint(1) default NULL,
      'IsLockedOut' tinyint(1) default NULL,
      'LastLockedOutDate' datetime default NULL,
      'FailedPasswordAttemptCount' int(11) default NULL,
      'FailedPasswordAttemptWindowStart' datetime default NULL,
      'FailedPasswordAnswerAttemptCount' int(11) default NULL,
      'FailedPasswordAnswerAttemptWindowStart' datetime default NULL,
      PRIMARY KEY  ('PKID')
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
  2. Change MySqlMembershipProvider::encryptionKey to a random hexadecimal value of your choice.
  3. Upload the two files to ~/App_Code.
  4. Modify your web.config using the following template (if you are on a shared hosting server, you will have to set writeExceptionsToEventLog to false):
    <connectionStrings>
        <add name="ConnString" 
          connectionString="Database=YOURDBNAME;Data Source=localhost;
                            User Id=YOURUSERNAME;Password=YOURPWD" />
    </connectionStrings>
    <system.web>
        <roleManager defaultProvider="MySqlRoleProvider"
            enabled="true"
            cacheRolesInCookie="true"
            cookieName=".ASPROLES"
            cookieTimeout="30"
            cookiePath="/"
            cookieRequireSSL="false"
            cookieSlidingExpiration="true"
            cookieProtection="All" >
        <providers>
            <clear />
            <add
                name="MySqlRoleProvider"
                type="Andri.Web.MySqlRoleProvider"
                connectionStringName="ConnString"
                applicationName="YOURAPPNAME"
                writeExceptionsToEventLog="true"
            />
        </providers>
        </roleManager>
        
        <membership defaultProvider="MySqlMembershipProvider" 
                    userIsOnlineTimeWindow="15">
            <providers>
                <clear />
                <add
                    name="MySqlMembershipProvider"
                    type="Andri.Web.MySqlMembershipProvider"
                    connectionStringName="ConnString"
                    applicationName="YOURAPPNAME"
                    enablePasswordRetrieval="false"
                    enablePasswordReset="true"
                    requiresQuestionAndAnswer="true"
                    requiresUniqueEmail="true"
                    passwordFormat="Hashed"
                    writeExceptionsToEventLog="true"
                />
          </providers>
        </membership>
    </system.web>
  5. That's it! You can use the login controls provided in the ASP.NET framework v2.0 if you want or use your own controls.

You can do whatever you want with this code but just send me an email if you have done some improvements or some bug correction. Isn't that what this website is about, sharing?

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
Generalstep 1 error Pin
thisismycode
1:39 11 Sep '09  
GeneralRe: step 1 error Pin
urbluca
1:57 16 Oct '09  
GeneralRecompiling Pin
simba222
3:26 25 Aug '09  
QuestionCould not load type 'Andri.Web.MySqlRoleProvider'. Pin
The_J0ker
23:15 8 Jul '09  
Generalhelp me Pin
jorgebatista07
20:43 10 Jun '09  
GeneralRe: help me Pin
The_J0ker
23:19 8 Jul '09  
Generalerror Pin
jorgebatista07
20:38 10 Jun '09  
GeneralRe: error Pin
palmerm1
5:44 12 Jun '09  
GeneralRe: error Pin
palmerm1
6:16 12 Jun '09  
QuestionProvider Could Not Establish A Connection to the Database PLEASE HELP1 Pin
TransMayernik751
13:10 6 Apr '09  
AnswerRe: Provider Could Not Establish A Connection to the Database PLEASE HELP1 Pin
TransMayernik751
17:25 6 Apr '09  
Generalcannot handle more than one user Pin
mam54
4:17 29 Nov '08  
GeneralRe: cannot handle more than one user Pin
mam54
5:29 29 Nov '08  
GeneralNatively supported by connector? Pin
lblogic
12:46 19 Nov '08  
GeneralAdd new role and add a user in a role Pin
semi
12:29 2 Nov '08  
GeneralUsing .NET Connector v5.2.3 Pin
palmerm1
19:16 19 Oct '08  
GeneralProfile Pin
uswebpro2
23:21 2 Sep '08  
General"Could not find any recognizable digits" - error Pin
Jo3p
6:08 19 Jun '08  
Generalhow to add custom fields like Firstname etc using Andri Mysql Membership Provider Pin
ryandemelo
8:53 11 Jun '08  
QuestionCan't use this provider to get the currently logged in user Pin
andieje1
12:38 8 May '08  
AnswerRe: Can't use this provider to get the currently logged in user Pin
vakti
9:38 25 May '08  
GeneralHow to provide Custome eror message Pin
podal
18:31 24 Apr '08  
GeneralWhy not Navigate to my Request URL Pin
podal
17:49 23 Apr '08  
QuestionCookies Time Expires Pin
Member 3355682
5:47 3 Apr '08  
GeneralHow to use this Role provider for Oracle database Pin
elizabethsheeba
6:36 11 Mar '08  


Last Updated 20 Dec 2005 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009