EPiWiki.se  - EPiServer notes shared with others
 

Troubleshoot Membership

[Edit]
Troubleshooting APS.NET membership provider. A easy way of troubleshoot any provider based configuration is to replace the configuration for the original provider with a logging one that has the original provider to do all functionality.

Logging membership provider


Web.config


Here we using our LoggingMembershipProvider to log all access to the base page provider (EPiServerCommonMembershipProvider)

<membership
      defaultProvider="LoggingMembershipProvider"
      userIsOnlineTimeWindow="10">
   <providers>
      <clear />
      <add name="LoggingMembershipProvider"
           provider="EPiServerCommonMembershipProvider"
           type="Dev.Web.LoggingMembershipProvider"/>
    ...

EPiServerLog.config


The logging membership provider logs to log4net, and here is the configuration for an EPiServer site.

<log4net>
  ...
  <logger name="Dev.Web.LoggingMembershipProvider">
    <level value="All" />
  </logger>

Source code



using System;
using System.Web.Security;
using System.Collections.Specialized;
using log4net;

namespace Dev.Web
{
    public class LoggingMembershipProvider : MembershipProvider
    {
        private static readonly ILog _log =
           LogManager.GetLogger(typeof(LoggingMembershipProvider));
        private string _providername;

        public override void Initialize(string name, NameValueCollection config)
        {
            if (config == null)
            {
                throw new ArgumentNullException("config");
            }
            if ((name

null) || (name.Trim().Length

0))
            {
                name = "LoggingMembershipProvider";
            }
            if (string.IsNullOrEmpty(config["description"]))
            {
                config.Remove("description");
                config.Add("description", "Logging Membership provider");
            }

            _providername = config["provider"];

            _log.Debug("Initialize for provider " + _providername);
            base.Initialize(name, config);
        }

        private MembershipProvider _provider;
        private object _providerLock = new object();
        private MembershipProvider Provider
        {
            get
            {
                if (_provider == null)
                {
                    lock (_providerLock)
                    {
                        if (_provider == null)
                        {
                            _provider = Membership.Providers[_providername];
                        }
                    }
                }

                return _provider;
            }
        }

        public override string ApplicationName
        {
            get
            {
                var ret = Provider.ApplicationName;
                _log.Debug("Getting ApplicationName = " + ret);
                return ret;
            }
            set
            {
                _log.Debug("Setting ApplicationName = " + value);
                Provider.ApplicationName = value;
            }
        }

        public override bool ChangePassword(
            string username,
            string oldPassword,
            string newPassword)
        {
            var ret = Provider.ChangePassword(username, oldPassword, newPassword);
            _log.DebugFormat("ChangePassword({1}, {2},{3}) := {0}",
                 ret,
                 username,
                 oldPassword,
                 newPassword);
            return ret;
        }

        public override bool ChangePasswordQuestionAndAnswer(
            string username,
            string password,
            string newPasswordQuestion,
            string newPasswordAnswer)
        {
            var ret = Provider.ChangePasswordQuestionAndAnswer(
                username, password, newPasswordQuestion, newPasswordAnswer);
           _log.DebugFormat("ChangePasswordQuestionAndAnswer({1}, {2}) := {0}",
                ret, username, password);
            return ret;
        }

        public override MembershipUser CreateUser(
            string username,
            string password,
            string email,
            string passwordQuestion,
            string passwordAnswer,
            bool isApproved,
            object providerUserKey,
            out MembershipCreateStatus status)
        {
            var ret = Provider.CreateUser(
                username, passwordAnswer, email, passwordQuestion,
                passwordAnswer, isApproved,
                providerUserKey, out status);
            _log.DebugFormat("CreateUser({1}, {2}) := {0}", ret, username, password);
            return ret;
        }

        public override bool DeleteUser(string username, bool deleteAllRelatedData)
        {
            var ret = Provider.DeleteUser(username, deleteAllRelatedData);
            _log.DebugFormat("DeleteUser({1}, {2}) := {0}",
                 ret, username, deleteAllRelatedData);
            return ret;
        }

        public override bool EnablePasswordReset
        {
            get
            {
                var ret = Provider.EnablePasswordReset;
                _log.DebugFormat("EnablePasswordReset := {0}", ret);
                return true;
            }
        }

        public override bool EnablePasswordRetrieval
        {
            get
            {
                var ret = Provider.EnablePasswordRetrieval;
                _log.DebugFormat("EnablePasswordRetrieval := {0}", ret);
                return ret;
            }
        }

       public override MembershipUserCollection FindUsersByEmail(
             string emailToMatch,
             int pageIndex,
             int pageSize,
             out int totalRecords)
        {
            var ret = Provider.FindUsersByEmail(emailToMatch, pageIndex,
                      pageSize, out totalRecords);
            _log.DebugFormat("FindUsersByEmail({1}, {2}, {3}, out {4}) := {0}",
                 ret, emailToMatch, pageIndex, pageSize, totalRecords);
            return ret;
        }

        public override MembershipUserCollection FindUsersByName(
            string usernameToMatch,
            int pageIndex,
            int pageSize,
            out int totalRecords)
        {
            var ret = Provider.FindUsersByName(
                usernameToMatch, pageIndex, pageSize, out totalRecords);
            _log.DebugFormat("FindUsersByName({1}, {2}, out {3}) := {0}",
                 ret, pageIndex, pageSize, totalRecords);
            return ret;
        }

        public override MembershipUserCollection GetAllUsers(
            int pageIndex,
            int pageSize,
            out int totalRecords)
        {
            var ret = Provider.GetAllUsers(pageIndex, pageSize, out totalRecords);
            _log.DebugFormat("GetAllUsers({1}, {2}, out {3}) := {0}",
                 ret, pageIndex, pageSize, totalRecords);
            return ret;
        }

        public override int GetNumberOfUsersOnline()
        {
            var ret = Provider.GetNumberOfUsersOnline();
            _log.DebugFormat("GetNumberOfUsersOnline() := {0}", ret);
            return ret;
        }

        public override string GetPassword(string username, string answer)
        {
            var ret = Provider.GetPassword(username, answer);
            _log.DebugFormat("GetPassword({1}, {2}) := {0}", ret, username, answer);
            return ret;
        }

        public override MembershipUser GetUser(string username, bool userIsOnline)
        {
            var ret = Provider.GetUser(username, userIsOnline);
            _log.DebugFormat("GetUser({1}, {2}) := {0}", ret, username, userIsOnline);
            return ret;
        }

        public override MembershipUser GetUser(
            object providerUserKey,
            bool userIsOnline)
        {
            var ret = Provider.GetUser(providerUserKey, userIsOnline);
            _log.DebugFormat("GetUser({1}, {2}) := {0}",
                 ret, providerUserKey, userIsOnline);
            return ret;
        }

        public override string GetUserNameByEmail(string email)
        {
            var ret = Provider.GetUserNameByEmail(email);
            _log.DebugFormat("GetUserNameByEmail({1}) := {0}", ret, email);
            return ret;
        }

        public override int MaxInvalidPasswordAttempts
        {
            get
            {
                var ret = Provider.MaxInvalidPasswordAttempts;
                _log.DebugFormat("MaxInvalidPasswordAttempts := {0}", ret);
                return ret;
            }
        }

        public override int MinRequiredNonAlphanumericCharacters
        {
            get
            {
                var ret = Provider.MinRequiredNonAlphanumericCharacters;
                _log.DebugFormat("MinRequiredNonAlphanumericCharacters := {0}", ret);
                return ret;
            }
        }

        public override int MinRequiredPasswordLength
        {
            get
            {
                var ret = Provider.MinRequiredPasswordLength;
                _log.DebugFormat("MinRequiredPasswordLength := {0}", ret);
                return ret;
            }
        }

        public override int PasswordAttemptWindow
        {
            get
            {
                var ret = Provider.PasswordAttemptWindow;
                _log.DebugFormat("PasswordAttemptWindow := {0}", ret);
                return ret;
            }
        }

        public override MembershipPasswordFormat PasswordFormat
        {
            get
            {
                var ret = Provider.PasswordFormat;
                _log.DebugFormat("PasswordFormat := {0}", ret);
                return ret;
            }
        }

        public override string PasswordStrengthRegularExpression
        {
            get
            {
                var ret = Provider.PasswordStrengthRegularExpression;
                _log.DebugFormat("PasswordStrengthRegularExpression := {0}", ret);
                return ret;
            }
        }

        public override bool RequiresQuestionAndAnswer
        {
            get
            {
                var ret = Provider.RequiresQuestionAndAnswer;
                _log.DebugFormat("RequiresQuestionAndAnswer := {0}", ret);
                return ret;
            }
        }

        public override bool RequiresUniqueEmail
        {
            get
            {
                var ret = Provider.RequiresUniqueEmail;
                _log.DebugFormat("RequiresUniqueEmail := {0}", ret);
                return ret;
            }
        }

        public override string ResetPassword(string username, string answer)
        {
            var ret = Provider.ResetPassword(username, answer);
            _log.DebugFormat("ResetPassword({1}, {2}) := {0}", ret, username, answer);
            return ret;
        }

        public override bool UnlockUser(string userName)
        {
            var ret = Provider.UnlockUser(userName);
            _log.DebugFormat("UnlockUser({1}) := {0}", ret, userName);
            return ret;
        }

        public override void UpdateUser(MembershipUser user)
        {
            _log.DebugFormat("UpdateUser({1})", user);
            Provider.UpdateUser(user);
        }

        public override bool ValidateUser(string username, string password)
        {
            var ret = Provider.ValidateUser(username, password);
            _log.DebugFormat("ValidateUser({1}, {2}) := {0}", ret, username, password);
            return ret;
        }
    }
}

Version author:
Mattias Lövström

EPiServer version

'EPiServer CMS 5''EPiServer CMS 6'