Я следовал этому руководству как шаблону для создания собственного поставщика аутентификации Советы и рекомендации 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);
}