ラボ > FuelPHP:auth関連

FuelPHPの最終ログイン日(last_login)について

「最終ログイン日からn日経過したユーザー」という条件で問題発生

作成日:2018-08-21, 更新日:2018-08-21

基本

FuelPHPのユーザーテーブルを「users」として、最終ログイン日のカラム名が「last_login」のとき
・ログインしたときに「users.last_login」が更新される

発生した問題と状況

▼設定
・ログイン有効期限を30日。ブラウザを閉じてもログアウトはされない

▼「最終ログイン日からn日経過したユーザー」という条件
・「users.last_login」と「現在:time()」と「n日」から条件式作成

▼結果
・数日前にアクセスした人が条件にひっかかる。
→n日以上前にログイン。その後、有効期限が切れる前に何度かアクセス。

▼調査して気付いたこと
・「\Auth::check()」時に「users.last_login」は更新されない
・「\Session::rotate()」しても「users.last_login」は更新されない

対応

if ( \Auth::check() ) {
  // 「users.last_login」を書き換える
  
  // ログインしている人用の処理
}
else {
  // ログインしていない人用の処理
}

▼下記はダメ

\Auth::update_user( array('last_login'=>time()) );

※「last_login」ではなく「profile_fields」に追加される。

手動で「users.last_login」を書き換えるクエリを発行する必要あり。