外部認証でWordPressにログイン

これをやる時にやり方を調べても全然出てきませんでした。
(-_-;)ホントカ・・・オイとなったので(o^-^)φメモ

普通はWordPressにユーザーを作成し、そのユーザでログインしますが、以前、会員サイトを構築した時に以下の仕様を作りました。

「外部のDBに会員情報を置きそのDBにAPIで接続、そして、外部で認証後、データ取得しWordPressにログイン」

まずは、仕様を詳しいく説明。

外部のAPIにログイン情報を渡してそこで認証させログイン情報があっていれば会員情報を渡してくれる間違ってたら「違うよ〜」と言われる。そして、ログイン情報が正しくて会員情報が帰ってきたら、ここでWordPressにログイン!

とまぁ、こんな感じで開発。
なのでログインにはWordPressの関数は使えない。
PHPでフツーにログイン処理

次にAPIにログイン情報を渡す処理

やっとここからWordPress側に!
ログイン処理は普通にPHPでごにょごにょ書いてあるので、それを使ってログイン!


if( isset($_POST['loginid'])){
if ($login_member->login_validation($_POST) === false) {
$message = 'ログインに失敗しました';
}elseif(Login_member::login($_POST) === false){
$message = 'ログインに失敗しました';
}else{
$url = site_url('member');
header("Location: {$url}");
exit;
}
}

とログインまで完成!と思いきや、なんか動作がおかしい(´・ ・`)?

なんかログアウトしてまたログインしようとしたらログインしてないのにすでにログイン済みになってるんですけど。
しかも、違うユーザーでログインしても前回のユーザー名が出てるし(;^_^A

キャッシュが残ってる?(ーー;)
しかも高速化考えてNginxにしてるのでめちゃくちゃキャッシュ残ります。
だからNginx側でログインしたらキャッシュ取らないように設定すればいいのです。
じゃぁWordPressコアファイルがどうしてる?と思ったので調べました。

コアファイルはログインしたらCookieにを保存してるんです。
いつもお世話になっているこの本「WordPressプラグイン開発のバイブル」を書かれたあの方のサイトにも書いてある。(あざっす!)
WordPressのCookieのナゾ
なのでこれをそっくりそのままやりました。

wordpress_logged_in_xxxx
私の場合はログインを自作しているのでこっち側だけでOK!(本当か?)

そしてNginx側で設定(※他のクッキーと一緒に設定してます)

# コメント書き込み中、ログイン中、パスワード保護コンテンツはキャッシュしない
if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {
set $do_not_cache 1;
}

そして、Nginxの設定を変えたら再起動もしくは再読み込み

/etc/init.d/nginx restart
もしくは
/etc/init.d/nginx reload

これで完了!

コアファイルよく考えてある。素晴らしい!

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中