PowerCMS X ブログ

2022-06-14

[FAQ] ユーザーまたはIPアドレスがロックアウトされてしまった時

ユーザー(メンバー)がロックアウトされてしまった場合

パスワードの再設定画面から、メールアドレスを入力、メールに記載のURLでパスワードをリセットするとロックアウトが解除されます。

IPアドレスはロックアウト解除されませんが、環境変数「recover_ip_at_reset」に trueを指定すると、パスワードリセット時に同時にそのIPアドレスを「禁止」→「情報」に変更されます。ただし、IPアドレスを「管理者」に戻すことはできません。

コードを一時的に修正して対応する場合

class.Prototype.php の「admin_protect」「ip_protect」をセットしている場所をコメントアウトします。

                if ( $key === 'administrator_ip' && $cfg->value ) {
                    // $this->admin_protect = true; // ※ 管理者のIP制限
                } else if ( $key === 'allowed_ip_only' && $cfg->value ) {
                    // $this->ip_protect = true; // ※ すべてのユーザーのIP制限
                } else if ( $key === 'timezone' && $cfg->value ) {

データベースを操作する場合

システムの設定画面のロックアウト関係の設定は、テーブル mt_option に option_kind='config' で保存されています。

システムの設定画面のスクリーンショット

option_key 設定名 option_value
two_factor_auth 2段階認証を利用する 0 or 1
lockout_limit ユーザー認証ロック回数 数値 (回数)
lockout_interval ユーザーロックアウト間隔 数値 (秒)
ip_lockout_limit IP認証ロック回数 数値 (回数)
ip_lockout_interval IPロックアウト間隔 数値 (秒)
no_lockout_allowed_ip 許可されたIPアドレスはロックしない 0 or 1
allowed_ip_only 管理者ログインにIPアドレス制限を設定する 0 or 1
administrator_ip すべてのユーザーにIPアドレス制限を適用する 0 or 1

IPアドレスは、mt_remote_ip テーブルに保存されています。これらの値をデータベースを直接操作して変更した場合はキャッシュのクリアが必要となります。

※ cache_driverが”File”の場合、temp_dirの配下もしくは、PowerCMSX/cache/配下にキャッシュファイル群があると思いますので、これらを削除してください。

ver.3.06で追加される環境変数

環境変数「ip_unlock」が追加されます。キーをモデル名( userまたはmember )、値を解除する秒( 数値 )に指定した配列で指定します。指定することで、ロックアウトから一定時間経過した禁止IPアドレスのロックアウトを解除します。

        "ip_unlock" : ["user": 3600, "member": 1800],

カテゴリー:トラブルシューティング | 技術情報

投稿者:Junnama Noda

2022-06-07

ビュー (テンプレート) の記述方法による再構築の軽量化について

PowerCMS Xは、再構築の高速処理を大きな特長の一つとしていますが、データベースのレコードが増えていくにつれて、またビュー (テンプレート) の記述が複雑になっていくにつれ、静的生成・動的生成ともにビューのビルドに時間がかかってくることは従来と変わりません。この記事では、PowerCMS Xならではのビューの記述方法による再構築の軽量化についてのヒントをご紹介します。

計測する

まずは、ページの中のどの部分の処理に時間がかかっているかを計測します。mt:speedmeterブロックタグを使うと便利です。時間がかかっていると思われるオブジェクトのループやループの中でループが呼ばれているなどの部分にあたりを付け、タグで囲ってください。

<mt:speedmeter name="ブロックの名前">
〜
</mt:speedmeter>

このブロックが処理されると、出力ソースの中に以下のHTMLコメントが追加されます。

<!--ブロックの名前 start.-->
〜
<!--ブロックの名前 took 0.7436 seconds to process this block.-->

ブロックは1つのビューに複数指定できますので、部分部分に埋め込んでください。HTMLコメントなので、HTMLで表示するときには影響ないと思われますが、公開中のページにコメントを出力されたくない場合は、プレビューなどでも確認できます。

ループタグの属性指定による利用するカラムの指定

PowerCMS Xでオブジェクトをループ出力するブロックタグ (例 : mt:entries, mt:pages)、リレーション指定されているオブジェクトを出力するブロックタグ (例 : mt:entrycategories, mt:entrytags ) に指定できるタグ属性「cols」を指定します。この属性は、ブロック内で利用されるカラムを絞り込む目的で指定します。

記事のループの指定の例

例えば、記事タイトルと公開日、パーマリンクのみを出力するループでは、以下のように指定します。指定はカンマ区切りテキストか、配列です。

<mt:entries cols="title,published_on">
〜
</mt:entries>

リレーション型、バイナリ型のカラムは指定の必要はありません。このループタグが呼ばれた時に発行されるSQL文は下記となります。

SELECT entry_title,entry_published_on FROM mt_entry ...

※ 実際には以下のカラムは自動的に指定されますが、すべてのカラムを無条件に読み込むことによるオブジェクトの肥大化を避け、軽量・高速に動作させることができます。特に、カラムを多数作成しているモデルでその差は顕著です。

  • id
  • workspace_id
  • status
  • basename

モジュールをキャッシュする

ビューの共通部分を別のモジュールにして mt:includeタグでインクルードしている時、cache_key属性にユニークなキーを渡すことで、モジュールのビルド結果がキャッシュされます。このキャッシュはメモリにキャッシュされ(永続的に保存されず)、index.phpへのリクエストが終わると自動的に破棄されます。ポップアップウィンドウからの再構築時には、一連のリダイレクトが完了するまで保持され、完了すると自動的に破棄されます。

<mt:include module="(Website) HTML Footer" cache_key="ユニークなキャッシュのキー">

ブロック単位でのキャッシュ

モジュールのキャッシュと同様にブロック単位でキャッシュすることができます。以下の指定では、モジュールのキャッシュと同様にメモリにキャッシュされ、index.phpへのリクエスト終了またはポップアップウィンドウからの再構築時には、一連のリダイレクトが完了するまで保持され、完了すると自動的に破棄されます。

<mt:cacheblock cache_key="ユニークなキャッシュのキー">
〜
</mt:cacheblock>

ダイナミックパブリッシング時のキャッシュへの追加属性

ダイナミックパブリッシング (動的生成) ではメモリに保存されたキャッシュは常にリクエストごとに生成・破棄されるため、モジュールやブロックのキャッシュは意味をなしません。以下の属性を追加で指定することができます。以下のブロックは、記事とページの更新があると破棄され、そうでない場合、最大1日キャッシュされます。これらの属性は、mt:includeタグ、mt:cacheblockタグ共通です。

<mt:cacheblock cache_key="ユニークなキャッシュのキー" workspace_id="スペースのID" triggers="entry,page" cache_ttl="86400">
〜
</mt:cacheblock>

以下のブロックは、記事IDが「1」の記事の更新があると破棄され、そうでない場合、最大1日キャッシュされます。

<mt:cacheblock cache_key="ユニークなキャッシュのキー" workspace_id="スペースのID" triggers="entry" cache_object_id="1" cache_ttl="86400">
〜
</mt:cacheblock>

DynamicCachingプラグインの利用

ダイナミックパブリッシング (動的生成) ではページを丸ごとキャッシュさせることができます。キャッシュは再構築トリガーの設定によって破棄され、Membersプラグインにより会員ユーザーがログインして閲覧する場合はキャッシュされません。

共通部分を静的ファイル化してインクルードするか、非同期読み込みする

こちらは静的生成・動的生成共通となります。例えば以下の記事で紹介している「やさにちウォッチ 別ウィンドウで開きます」でランキングを表示させている部分ですが、全てのページで共通であり、1日に1回更新されればよい部分となっています。

このような部分については、静的にインデックス・アーカイブを出力して、mt:includeタグでファイルをインクルードするようにするか、JSON形式で静的ファイルを出力するようなビューを作成して、Ajaxリクエストなどで非同期に読み込むことで、負荷を軽減でき、ページ表示速度も速くすることができます。

DBのチューニングや再構築の並列処理などの選択肢

ループのフィルタに利用しているカラムには「インデックス」を指定する

ループのタグでリレーション(記事に対するカテゴリやタグ)以外の、モデルの標準カラムでフィルタリングして出力する時は、そのカラムに「インデックス」を指定することで高速化するいことができます。以下の例では、記事に「filter」というカラムを追加して、その値でフィルタリングしている例です。

<mt:entries filter="値">
〜
</mt:entries>

この記事ではビュー (テンプレート) に絞ってご紹介したため、その他の高速化手法については改めて纏めてご紹介します。

2022-03-08

PowerCMS X のサポートライセンスとは?

PowerCMS X および 有償のオプションプラグインには、サポートライセンスがあります。

これは、文字通り各製品に関するサポートを受けるためのライセンスです。製品に関する機能や仕様、不具合などに関する問い合わせやそのサポートが受けられる他、サポート期間内にリリースされたアップデータ、新バージョン、新たに製品に同梱されたプラグインを無償でご利用いただけます。サポートの内容に関する詳細は「PowerCMS X サポートについて」のページでご案内しています。

ライセンスを購入した直後の1年のサポートはソフトウェアライセンス費用に含まれており、翌年の購入月の月末までが有効期限となります。つまり 2022年3月7日にご購入いただいた場合は、2023年3月末日がサポート期限となります。 期限の切れる1ヶ月ほど前に、次年度のサポートライセンス更新のご案内をメールにてお送りしています。

2年目以降のサポートライセンスとは

2年目以降のサポートライセンスは、ライセンス価格の20%で提供しています。「価格」のページにてご確認ください。

サポートライセンスの更新については任意となりますが、毎年更新いただくことを推奨しています。いったんサポートが途切れたあとにもう一度サポートを受けたい場合は、未契約期間もさかのぼって途切れた時点から現在までとそこから1年の費用が発生します。

サポートライセンスを更新しているかぎり、製品のメジャーバージョンアップ時も買い直しの必要はなく最新の製品が利用できます。

サポートライセンスが切れるとどうなる?

製品のメジャーバージョンアップや、製品サポートへのご質問などサポート全般のご利用ができなくなります。Multi 以上で提供している Backlog プロジェクトによるサポートも利用できません。また、個別の追加機能開発なども承ることができません。

ただし、サポートライセンスが切れていても、セキュリティアップデートのための修正プログラムはご用意します。

導入時の代理店と運用保守の会社が違う場合は?

できれば、窓口を変更される前にご一報ください。
導入時に代理店・制作会社様が代行して申し込まれたライセンスの場合、エンドユーザー様に対する一次サポートは代理店が行うものとしています。つまり、我々は、エンドユーザー様を直接サポートすることはなく、もちろん他社からのお問い合わせもサポートできません。

この場合はエンドユーザー様もしくは運用保守を担当される会社様に窓口を変更し、サポートライセンスをご購入いただく必要があります。

お見積り・お問い合わせ

サポートが有効かどうかわからない、切れてしまったサポートを更新したいなどサポートライセンスにまつわるお問い合わせは、ライセンスコードを添えて問い合わせフォームよりご連絡ください。

カテゴリー:サポート

投稿者:Masaki

ブログ内検索

アーカイブ