Search code examples
sharepointsharepoint-2010membership-provider

Finding active Membership Provider and ensure its availability in Sharepoint 2010


How to find out what is the current active Membership Provider and see if it's available?


Solution

  • I used the following function to solve this problem. This function finds the current membership provider and role provider and uses one of its functions (ValidateUser) to find out if the membership provider is available and running.

    private bool CheckMembershipProvider()
    {
        try
        {
        string username = txtboxUserName.Text;
        string password = txtboxPassword.Text;
        if (!SPContext.Current.Web.UserIsSiteAdmin)
        {
            txtCurrentMembershipProviderError.Text = "You need to be admin.";
            return false;
        }
        var spIisSettings = SPContext.Current.Site.WebApplication.GetIisSettingsWithFallback(SPContext.Current.Site.Zone);
        var membershipProviderName = spIisSettings.FormsClaimsAuthenticationProvider != null ? spIisSettings.FormsClaimsAuthenticationProvider.MembershipProvider : null; ;
        var roleProviderName = spIisSettings.FormsClaimsAuthenticationProvider != null ? spIisSettings.FormsClaimsAuthenticationProvider.RoleProvider : null;
    
        txtMembershipProviderName.Text = membershipProviderName != null? membershipProviderName.ToString(): "----";
        txtRoleProviderName.Text = roleProviderName.ToString();
        var provider = spIisSettings.FormsClaimsAuthenticationProvider != null ? Membership.Providers[spIisSettings.FormsClaimsAuthenticationProvider.MembershipProvider] : null;
        if (provider != null)
        {
            var method = provider.GetType().GetMethod("ValidateUser", new Type[] { typeof(string), typeof(string) });
            if (method != null)
            {
            try
            {
                bool valid = (bool)method.Invoke(provider, new object[] {username, password });
                txtCurrentMembershipProviderError.Text = valid ? "Valid user":"Invalid user";
                return true;
            }
            catch (Exception ex)
            {
                txtCurrentMembershipProviderError.Text = "Provider is not accessible. " + ex.Message ;
                return false;
            }
            }
            else
            {
            txtCurrentMembershipProviderError.Text = "No prepare admin login method in default membership provider (" + provider.GetType().Name + ")";
            return false;
            }
        }
        else
        {
            txtCurrentMembershipProviderError.Text = "No default membership provider";
            return false;
        }
        }
        catch (Exception ex)
        {
        txtCurrentMembershipProviderError.Text = ex.Message;
        return false;
        }
    }