WordPressでログインユーザにだけ固定ページを見せる

WordPressでユーザの名前やメールアドレスなどを画面表示などに使用したい場合、
そのページをログインユーザだけに見せる。
という方法をとりたくなりまよね。

以下は、固定ページでの実装方法になります。
最初に全てのコードを掲載します。



$url_path, 'label_username' => __( 'Username' ), 'label_password' => __( 'Password' ), 'remember' => false, ); if ( !is_user_logged_in() ){ wp_login_form( $args ); } else { /* ここにログインしているユーザ用の処理を記述 */ } endwhile; // End of the loop. ?>

まずは、以下で、専用の固定ページ用のテンプレートとして宣言します。

/**
 Template Name: page-work
 */

page-work
部分は、任意ですが、テンプレートのファイル名はpage-xxxx.phpとしましょう。

ログインしたら、今いるページに戻って来る為に、今いるページのパーマリンクを取得します。

$url_path = get_permalink();

ログインしていなかったら、ログインフォームを表示させる為のコード

$args = array(
    'redirect'        => $url_path,
    'label_username'  => __( 'Username' ),
    'label_password'  => __( 'Password' ),
    'remember'        => false
);

if ( !is_user_logged_in() ){
    wp_in_form( $args );
}

ログインしていなかったら、ログインフォームではなく、トップページにリダイレクトなどしたい場合は、
wp-redirect()
を使いましょう。

LB配下で安全にconcrete5を使う

この記事はconcrete5 Japan Advent Calendar 2017の8日目の記事です。
7日目はpictron2009さんの記事”プライマリで仕事を受注した案件でconcrete5が採用に至ったポイント“でした。

concrete5でも、LB越しのアクセスでは、
ユーザーのアクセス元の IP アドレスが変わるとログアウトするように設計
されているんだとか・・・

と、いう事で、AWSのALBやELB越しにアクセスした場合、何の対処もしないとnginxに到達するアクセス元IPはALBやELBのIPアドレスになってしまうのは、LB経由の場合は普通の事。

最近すっかりAWS仕事が多い事もあって、その回避策・・・

まずは、EC2インスタンスにKUSANAGIをインストールして、プロビジョニングとconcrete5のインストールまで実施
現時点(2017年12月10日)では、KUSANAGIでインストールされるconcrete5は5.7という事で、
ドキュメントルートに展開されたconcrete5のファイルをごっそり削除して、8.2の各ファイルを展開します。
データベースが作られてしまっている場合は、250テーブル弱ほどあると思いますが、一気にdrop table テーブル名
として、テーブルも削除し、8.2をインストールしましょう。

8.2のインストールができたら、concrete5のダッシュボードにアクセスして、nginx上のログを確認してみましょう。
KUSANAGIでnginxのログファイルは

/home/kusanagi/プロファイル名/log/nginx/access.log

に出力されます。

また、KUSANAGIのアクセスログフォーマットは

    log_format main '$request_time $sent_http_x_f_cache $sent_http_x_b_cache '
                    '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

として記録されます。
この”$remote_addr”が、LBのIPアドレスに成ってしまうのが問題ですよね。
#LBのIPを信頼済みIPアドレスとして認識させる方法もあるようですが...

そこで、/etc/nginx/nginx.conf
に以下の行を追記します。
#自分は、httpディレクティブの一番最後に以下を記載

        set_real_ip_from        ALBやELBに設定しているサブネットマスク値
        real_ip_header          X-Forwarded-For;
        real_ip_recursive       on;

これで、”$remote_addr”は、アクセス元クライアントのIPが正しく記録され、concrete5にログイン後もログアウトされる事なく利用できるようになります。
(自分の環境ではログアウトされる事なく動いていますが、これが正しい対応かは判っていませんが・・・)

みなさんにハッピーなconcrete5ライフを!!