2

カスタム認証プロバイダーを作成するためのテンプレートとしてこのガイドに従いました 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);
        }
4

2 に答える 2

0

最初に確認することは、[ホスト] > [拡張機能] の下に認証プロバイダーをインストールしたときに、そこで [有効] フラグを構成したことです。

ただし、特定のポータルで有効にするには、[管理] > [拡張機能] に移動し、[認証システム] セクションを開き、プロバイダーの [編集] をクリックして有効にする必要があります。

それでも問題が解決しない場合は、設定の実装に問題がある可能性があります。(AuthenticationSettingsBase を使用して設定を実装した場合)。

于 2013-09-04T16:05:22.303 に答える