如果禁用默认身份验证提供程序,DNN自定义身份验证提供程

时间:2013-08-28 06:56:30

标签: dotnetnuke dotnetnuke-module dotnetnuke-settings

我将此指南作为模板来创建自定义身份验证提供程序 DotNetNuke Tips and Tricks #12: Creating your own Authentication Provider

在该指南中,他创建了自己的身份验证配置类,以便它不与默认提供程序(他构建自定义提供程序)共享配置,并将其转换为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);
        }

2 个答案:

答案 0 :(得分:0)

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

但是,要为特定的Portal启用它,您需要转到Admin>扩展程序,打开“身份验证系统”部分,单击“提供程序”上的“编辑”,然后在“启用”中启用它。

如果您仍然遇到问题,可能会出现设置实施问题。 (如果使用AuthenticationSettingsBase实现了设置)。

答案 1 :(得分:0)

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

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