Dotnetnuke 如果禁用默认身份验证提供程序,则不显示DNN自定义身份验证提供程序

Dotnetnuke 如果禁用默认身份验证提供程序,则不显示DNN自定义身份验证提供程序,dotnetnuke,dotnetnuke-module,dotnetnuke-settings,Dotnetnuke,Dotnetnuke Module,Dotnetnuke Settings,我按照此指南作为模板创建自定义身份验证提供程序 在该指南中,他创建了自己的身份验证配置类,这样它就不会与我转换为c#的默认提供程序(他基于该提供程序构建了自定义提供程序)共享配置 只要我将我的身份验证提供程序设置为独立于默认提供程序而启用或禁用,这就可以工作,但是,如果未启用默认提供程序,则不会加载我的提供程序 if (PortalController.GetPortalSettingsDictionary(portalID) .

我按照此指南作为模板创建自定义身份验证提供程序

在该指南中,他创建了自己的身份验证配置类,这样它就不会与我转换为c#的默认提供程序(他基于该提供程序构建了自定义提供程序)共享配置

只要我将我的身份验证提供程序设置为独立于默认提供程序而启用或禁用,这就可以工作,但是,如果未启用默认提供程序,则不会加载我的提供程序

if (PortalController.GetPortalSettingsDictionary(portalID)
                                .TryGetValue(ENABLED_SETTING_KEY, out setting))
            {
                _Enabled = bool.Parse(setting);
            }
当我进去修改设置时,上面的代码会触发,但它从未找到“ENABLED\u SETTING\u KEY”(“DNN\u ScanToLogin\u ENABLED”)指定的值。门户设置词典(用于该门户ID)包含14项,其中不包含“DNN\u ScanToLogin\u Enabled”。有人能告诉我为什么吗

编辑 我对事情做了一些修改

public static void ClearConfig(int portalId)
        {
            string key = CACHEKEY + "_" + portalId.ToString();
            DataCache.RemoveCache(key);
        }

变成

public static void UpdateConfig(ScanToLoginAuthConfig config)
        {
            PortalController.UpdatePortalSetting(config.PortalId, "DNN_ScanToLogin_Enabled", config.Enabled.ToString());
            ClearConfig(config.PortalId);
        }

分别。因此,现在键似乎更新和设置正确(对于我未指定的正确定义…) 但是,当我禁用默认身份验证提供程序并启用我的身份验证提供程序时,它仍然不会显示我的提供程序,而是显示默认设置。当默认值和我的值都启用时,将同时显示,选项卡式

我还更新了以下内容,以包括在代码顶部定义的密钥名称


我要确认的第一件事是,当您在Host>Extensions下安装身份验证提供程序时,您在那里配置了Enabled标志

但是,要为特定门户启用它,您需要转到“管理”>“扩展”,打开“身份验证系统”部分,单击提供商上的“编辑”,然后在那里启用它。


如果仍然存在问题,则设置实现可能会出现问题。(如果使用AuthenticationSettingsBase实现了设置)。

必须更改登录文件中的代码,并使用ScanToLoginAuthConfig类作为已启用的属性

public override bool Enabled
    {
        get
        {
            return ScanToLoginAuthConfig.GetConfig(PortalId).Enabled;
        }
    }

可能是我走错了方向,如果未启用默认提供程序,则与GetPortalSettingsDictionary交互的部分不是身份验证提供程序未显示的原因。
public static void UpdateConfig(ScanToLoginAuthConfig config)
        {
            PortalController.UpdatePortalSetting(config.PortalId, "DNN_ScanToLogin_Enabled", config.Enabled.ToString());
            ClearConfig(config.PortalId);
        }
public static ScanToLoginAuthConfig GetConfig(int portalId)
        {
            string key = CACHEKEY;// +"_" + portalId.ToString();
public static void UpdateConfig(ScanToLoginAuthConfig config)
        {
            PortalController.UpdatePortalSetting(config.PortalId, "DNN_ScanToLogin_Enabled", config.Enabled.ToString());
            ClearConfig(config.PortalId);
        }
public override bool Enabled
    {
        get
        {
            return ScanToLoginAuthConfig.GetConfig(PortalId).Enabled;
        }
    }