2

我按照本指南作为模板来创建我的自定义身份验证提供程序 DotNetNuke 提示和技巧 #12:创建自己的身份验证提供程序

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

[Serializable()]
    public class ScanToLoginAuthConfig
    {
        #region "Private Members"

        private bool _Enabled = true;

        private int _portalId;
        private const string CACHEKEY = "Authentication.ScanToLogin.DNN";

        private const string ENABLED_SETTING_KEY = "DNN_ScanToLogin_Enabled";

        #endregion

        #region "Constructor(s)"

        protected ScanToLoginAuthConfig(int portalID)
        {
            _portalId = portalID;

            try
            {
                string setting = Null.NullString;
                if (PortalController.GetPortalSettingsDictionary(portalID)
                                    .TryGetValue(ENABLED_SETTING_KEY, out setting))
                {
                    _Enabled = bool.Parse(setting);
                }
                setting = Null.NullString;
            }
            catch
            {
            }
        }

        #endregion

        #region "Public Properties"

        public bool Enabled
        {
            get { return _Enabled; }
            set { _Enabled = value; }
        }

        [Browsable(false)]
        public int PortalId
        {
            get { return _portalId; }
            set { _portalId = value; }
        }

        #endregion

        #region "Public SHared Methods"

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

        public static ScanToLoginAuthConfig GetConfig(int portalId)
        {

            string key = CACHEKEY + "_" + portalId.ToString();
            ScanToLoginAuthConfig config = (ScanToLoginAuthConfig) DataCache.GetCache(key);

            if (config == null)
            {
                config = new ScanToLoginAuthConfig(portalId);
                DataCache.SetCache(key, config);
            }
            return config;
        }

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

        #endregion

    }

这适用于我将身份验证提供程序切换为独立于默认提供程序启用或禁用,但是,如果未启用默认提供程序,我的提供程序不会加载。

if (PortalController.GetPortalSettingsDictionary(portalID)
                                .TryGetValue(ENABLED_SETTING_KEY, out setting))
            {
                _Enabled = bool.Parse(setting);
            }

当我进入修改设置时,上面的代码会触发,但它永远不会找到“ENABLED_SETTING_KEY”(“DNN_ScanToLogin_Enabled”)指定的值。门户设置字典(针对该门户 ID)包含 14 个项目,其中没有“DNN_ScanToLogin_Enabled”。谁能告诉我为什么会这样,拜托!

编辑 我已经修改了一些东西

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

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 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);
        }
4

2 回答 2

0

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

但是,要为特定门户启用它,您需要转到 Admin > Extensions,打开 Authentication Systems 部分,单击 Provider 上的 Edit,然后在此处启用它。

如果您仍然有问题,则可能是您的设置实施存在问题。(如果您使用 AuthenticationSettingsBase 实现了设置)。

于 2013-09-04T16:05:22.303 回答
0

您必须更改登录文件中的代码并将 ScanToLoginAuthConfig 类用于 Enabled 属性

public override bool Enabled
    {
        get
        {
            return ScanToLoginAuthConfig.GetConfig(PortalId).Enabled;
        }
    }
于 2016-01-27T15:27:38.113 回答