Поставщик пользовательской аутентификации DNN не отображается, если поставщик аутентификации по умолчанию отключен

Я следовал этому руководству как шаблону для создания собственного поставщика аутентификации Советы и рекомендации DotNetNuke №12. Создание собственного поставщика аутентификации

В этом руководстве он создает свой собственный класс конфигурации аутентификации, чтобы он не делился конфигурацией с провайдером по умолчанию (который он создал для своего настраиваемого провайдера), который я преобразовал в С#.

[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»). Словарь настроек портала (для этого идентификатора портала) содержит 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);
        }

person Linton Caldecott    schedule 28.08.2013    source источник
comment
Возможно, я нахожусь на неправильном пути, и часть, взаимодействующая с GetPortalSettingsDictionary, не является причиной того, что мой поставщик аутентификации не отображается, если поставщик по умолчанию не включен.   -  person Linton Caldecott    schedule 28.08.2013


Ответы (2)


Первое, что я хотел бы подтвердить, это то, что когда вы установили своего поставщика аутентификации в разделе «Хост»> «Расширения», вы настроили там флаг «Включено».

НО, чтобы включить его для определенного портала, вам нужно перейти в раздел "Администрирование" > "Расширения", открыть раздел "Системы аутентификации", нажать "Изменить" на вашем провайдере и включить его там.

Если у вас все еще есть проблемы, у вас могут возникнуть проблемы с реализацией ваших настроек. (Если вы реализовали настройки с помощью AuthenticationSettingsBase).

person DotNetNuclear    schedule 04.09.2013

вы должны изменить код внутри вашего файла входа и использовать свой класс ScanToLoginAuthConfig для свойства Enabled

public override bool Enabled
    {
        get
        {
            return ScanToLoginAuthConfig.GetConfig(PortalId).Enabled;
        }
    }
person Hamed Abbasi    schedule 27.01.2016