ASP.NET 2/3.5 MembershipProvider Skeleton

Digital Alternatives
Home

There's no easy way to whip up a quick MembershipProvider skeleton class for the times that you need a basic authentication system but don't need the whole bloated AspNet*Provider schema polluting your database. When you want to roll your own (since most implementations are bloated for very simple projects,) you can start with this skeleton which contains the basic ValidateUser method implemented in LINQ on a basic table called User. It makes a great starting point for those who just want to get a demo up and running but don't want to fuss with defining every single abstract method that the MembershipProfile class defines. This code assumes SHA1 password hashing.


  public class MyMembershipProvider : MembershipProvider {
    MyDataContext dc = new MyDataContext();

    public override bool ValidateUser(string username, string password) {
      User user = (from u in dc.Users where u.LoginName == username select u).SingleOrDefault();

      if (user != null && user.PasswordHash.Equals(FormsAuthentication.HashPasswordForStoringInConfigFile(password, "sha1"))) {
        FormsAuthentication.SetAuthCookie(user.LoginName, false);
        return true;
      }

      return false;
    }

    public override int MinRequiredPasswordLength {
      get { return 6; }
    }

    public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) {
      throw new NotImplementedException();
    }

    public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords) {
      throw new NotImplementedException();
    }

    public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer) {
      throw new NotImplementedException();
    }

     public override bool  ChangePassword(string username, string oldPassword, string newPassword) {
 	    throw new NotImplementedException();
     }

     public override bool EnablePasswordReset {
       get { throw new NotImplementedException(); }
     }

     public override bool EnablePasswordRetrieval {
       get { throw new NotImplementedException(); }
     }

     public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords) {
       throw new NotImplementedException();
     }

     public override int GetNumberOfUsersOnline() {
       throw new NotImplementedException();
     }

     public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords) {
       throw new NotImplementedException();
     }

     public override bool DeleteUser(string username, bool deleteAllRelatedData) {
       throw new NotImplementedException();
     }

     public override string GetUserNameByEmail(string email) {
       throw new NotImplementedException();
     }

     public override MembershipUser GetUser(object providerUserKey, bool userIsOnline) {
       throw new NotImplementedException();
     }

     public override MembershipUser GetUser(string username, bool userIsOnline) {
       throw new NotImplementedException();
     }

     public override bool UnlockUser(string userName) {
       throw new NotImplementedException();
     }

     public override void UpdateUser(MembershipUser user) {
       throw new NotImplementedException();
     }

     public override string ResetPassword(string username, string answer) {
       throw new NotImplementedException();
     }

     public override string GetPassword(string username, string answer) {
       throw new NotImplementedException();
     }

     public override string PasswordStrengthRegularExpression {
       get { throw new NotImplementedException(); }
     }

     public override int MinRequiredNonAlphanumericCharacters {
       get { throw new NotImplementedException(); }
     }

     public override int PasswordAttemptWindow {
       get { throw new NotImplementedException(); }
     }

     public override MembershipPasswordFormat PasswordFormat {
       get { throw new NotImplementedException(); }
     }

     public override bool RequiresQuestionAndAnswer {
       get { throw new NotImplementedException(); }
     }

     public override bool RequiresUniqueEmail {
       get { throw new NotImplementedException(); }
     }

     public override int MaxInvalidPasswordAttempts {
       get { throw new NotImplementedException(); }
     }

     public override string ApplicationName {
       get {
         throw new NotImplementedException();
       }
       set {
         throw new NotImplementedException();
       }
     }

  }