asp.net - 通过代码更改 ASP.NET 成员资格提供程序

标签 asp.net asp.net-membership

我们需要在 ASP.NET WebFroms 应用程序中同时支持两个成员资格提供程序。确实用户通过选中复选框表示他/她想通过 Asp Net Sql Membership Provider 登录或 Asp Net Active Directory Membership Provider
我的想法是根据复选框选中的值以编程方式更改成员(member)资格提供程序。但是不知道怎么才能做到这一点。

任何帮助都受到高度赞赏。

最佳答案

您需要的是一个包含两个真实提供者的复合提供者和一个可以确定应该使用哪个提供者的服务。

更新

您的 CompositeProvider可能看起来像这样,并且可以像任何其他提供程序一样在您的 web.config 中注册。

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.
}

关于asp.net - 通过代码更改 ASP.NET 成员资格提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16105187/

相关文章:

c# - 编译器错误 : 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\014679fc\1b393534\App_Web_glpoum5i.dll' could not be found

html - 列宽不均

c# - 更改成员资格、角色等的默认连接字符串

asp.net - 使用电子邮件而不是用户名恢复密码

asp.net - ASP.Net 中 web.config 文件中成员资格提供程序类型中的 Culture 和 PublicKeyToken 是什么?

ASP.NET 成员(member)资格 getuserbyID

asp.net-mvc - 在 MVC.NET 的 AuthorizeServices 中,我在哪里设置角色?

c# - 如何通过c#实现OpenID

c# - 为什么在使用 C# JavaScriptSerializer 和 RegisterClientScriptBlock 时 JSON 标签无效?

asp.net - 在资源文件中使用 HTML