[FuelPHP] simpleauthでlogoutしてもcheckするとログインしている件

simpleauthで\Auth::logout()しても
別の画面にアクセスするとログインされているという事象でハマりました。

Class Member extends \Controller
{
  public function action_logout()
  {
    \Auth::logout();
    var_dump( \Auth::check());
    exit;
  }
  public function action_login()
  {
    var_dump( \Auth::check());
    exit;
  }
}

このような簡単なプログラムを書いてみます。
logoutアクションにアクセスすると、結果は

bool(false)

つまりログアウトされているわけですが、
その後、loginアクションにアクセスすると

bool(true)

となっているわけです。
ログアウトしたはずなのに!

消しても消してもまるで亡霊のようにSessionが残っているわけです。
いままで気にもしなかったFuelPHPの前処理で、
勝手に処理してるのかと探しまくるもどうもそれらしいところはない。

実は、困ったのが、opAuthと連携してソーシャルログインを開発している時。
メアドとパスワードのアカウント1でログイン後、ログアウト。
その後、ソーシャルログインを試すと、勝手にアカウント1に紐づいちゃうんですよね。

正解は、ソーシャルログインから得たメールアドレスで
新しいアカウント2を作って欲しい。

で、まぁ、apAuthやAuth、SimpleAuthからSessionまで全部調べても
原因がわからず、それぞれの設定ファイルを見直すと

config/simpleauth.phpのremember_meが原因

でした。

remenber_meとは、最初は全然期待してなかったけど
いざ見たらラストは号泣のあの映画ではなく、

 

remember_me($user_id = null)

remember_me メソッドは、 remember_me クッキーを設定することができます。 $user_id が指定されていない場合は、現在ログインしているユーザーが使用されます。

静的 はい
パラメータ
パラメータ デフォルト パラメータ
$user_id
null
記憶するユーザーの id
返り値 boolean。正しく remember me クッキーが設定されていれば true を、 user_id が存在しないか remember_me 機能が設定で無効になっている場合 false が返されます。

こういう機能だそうです。
便利そうだので、trueにしてたのをすっかり忘れてました。

こいつをfalseにしたら、問題は解消されました。

\Auth::logout()は、

\Session::delete('username');
\Session::delete('login_hash');

こんなことしかしてないので、
remember_meがtrueの設定だと、ログイン情報がCookieに書き込まれていて
正常に機能しないって事になりますね。

rugoh-wordpress