Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change ASP.NET Membership Provider by code

We are in need of supporting two Membership providers simultaneously in an ASP.NET WebFroms application. Indeed user by checking a Checkbox indicates that he/she wants to login via Asp Net Sql Membership Provider or Asp Net Active Directory Membership Provider

My idea is changing Membership provider programmatically based on Checkbox checked value. But do not know how can do this.

Any help is highly appreciated.

like image 732
Afshar Mohebi Avatar asked Feb 17 '23 18:02

Afshar Mohebi


1 Answers

What you need is a composite provider that wraps the two real providers and a service that can determine which provider should be used.

UPDATE

Your CompositeProvider might look like this and can be registered in your web.config just like any other provider.

public class CompositeProvider : MembershipProvider
{
    private MembershipProvider SqlProvider
    {
        get { return Membership.Providers["Sql Provider"]; }
    }

    private MembershipProvider AdProvider
    {
        get { return Membership.Providers["Ad Provider"]; }
    }

    // This property implements the logic that knows how
    // to switch between the two providers.
    private MembershipProvider Provider
    {
        get
        {
            var context = HttpContext.Current;

            if (context != null)
            {
                var session = context.Session;

                if (session != null &&
                    session["use_ad_provider"] == "true")
                {
                    return AdProvider;
                }
            }

            return SqlProvider;
        }
    }

    public override bool ChangePassword(string username, 
        string oldPassword, string newPassword)
    {
        return Provider.ChangePassword(username, oldPassword, newPassword);
    }

    public override bool DeleteUser(string username, 
        bool deleteAllRelatedData)
    {
        return Provider.DeleteUser(username, deleteAllRelatedData);
    }

    public override bool EnablePasswordReset
    {
        get { return Provider.EnablePasswordReset; }
    }

    public override bool EnablePasswordRetrieval
    {
        get { return Provider.EnablePasswordRetrieval; }
    }

    // TODO: Implementation of all other members.
}
like image 51
Steven Avatar answered Feb 28 '23 17:02

Steven