カスタム認証プロバイダーを作成するためのテンプレートとしてこのガイドに従いました 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();
それぞれ。そのため、キーが正しく更新および設定されているように見えます (正しく定義されていないため...)。default と mine の両方が有効になっている場合、両方がタブ付きで表示されます。
また、コードの上部で定義されているように、キーの名前を含めるように以下を更新しました。
public static void UpdateConfig(ScanToLoginAuthConfig config)
{
PortalController.UpdatePortalSetting(config.PortalId, "DNN_ScanToLogin_Enabled", config.Enabled.ToString());
ClearConfig(config.PortalId);
}