我将此指南作为模板来创建自定义身份验证提供程序 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);
}
答案 0 :(得分:0)
我要确认的第一件事是当您在Host>下安装身份验证提供程序时扩展,您在那里配置了Enabled标志。
但是,要为特定的Portal启用它,您需要转到Admin>扩展程序,打开“身份验证系统”部分,单击“提供程序”上的“编辑”,然后在“启用”中启用它。
如果您仍然遇到问题,可能会出现设置实施问题。 (如果使用AuthenticationSettingsBase实现了设置)。
答案 1 :(得分:0)
您必须更改登录文件中的代码,并将ScanToLoginAuthConfig类用于Enabled属性
public override bool Enabled
{
get
{
return ScanToLoginAuthConfig.GetConfig(PortalId).Enabled;
}
}