我按照本指南作为模板来创建我的自定义身份验证提供程序 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);
}