ラボ > FuelPHP:auth関連

FuelPHPのログイン周りの叩き台

「Auth::〇〇〇()」の前後でゴニョゴニョするための叩き台。

作成日:2018-01-05, 更新日:2018-01-05

基本

・セッションの有効期限とは別に有効期限を持たせる(セッションの有効期限のみだと、時間切れが原因なのかどうかが分からない)
・ログイン中かチェックするときは、処理を分岐させたいときもある。
・「auth.php」のカスタマイズは避けたい

ログイン中かチェック

・有効期限のときは、時間切れのエラーページへリダイレクト
・有効期限と関係なしの場合は、ログインページへリダイレクト
・リダイレクト無しで、単純にチェックのみしたいときもある。

叩き台

・セッションの有効期限は長めに設定しておく
・「〇〇\classes\util\auth.php」を作成
・「\Auth::login()」は「\Util_Auth::login()」的な感じで使う。

<?php
class Util_Auth {
   
   // セッションのキー名
   const KEY_LOGIN_LIMIT = 'loginLimit';
   const KEY_LAST_ACCESS = 'lastAccess';
   
   // ログイン有効期限(秒):セッションの有効期限より短くしておく
   const LOGIN_LIMIT_SEC = 3600;
   
   /** auth::login() **/
   public static function login($username='', $password='') {
      
      if (\Auth::login($username, $password)) {
         \Session::Set(self::KEY_LOGIN_LIMIT, self::LOGIN_LIMIT_SEC);
         \Session::Set(self::KEY_LAST_ACCESS, time());
         
         return true;
      }
      else {
         return false;
      }
   }
   
   /** auth::check() **/
   public static function check($isRedirect=true) {
      
      $result = false;
      
      if ( \Auth::Check() ) {
         $loginLimit = \Session::Get(self::KEY_LOGIN_LIMIT, 0);
         $lastAccess = \Session::Get(self::KEY_LAST_ACCESS, 0);
         
         // 有効期限のチェック
         if ( 0 < $loginLimit ) {
            if ( time()-$loginLimit < $lastAccess ) {
               $result = true;
               
               echo 'suc login';
            }
            else {
               // 有効期限ぎれ
               echo 'err expired-loginLimit';
            }
         }
         else {
            // 念のためにログアウト:ココに入るコトは無いと思う。
            echo 'err expired-session: ' . self::KEY_LOGIN_LIMIT;
            
            self::logout();
         }
      }
      else {
         // ログアウトされている
         echo 'err logout';
      }
      
      if ($isRedirect && !$result) {
         // ログインページ or エラーページなどにリダイレクト
         echo ' - redirect';
      }
      
      return $result;
   }
   
   /** auth::logout() **/
   public static function logout() {
      \Session::delete(self::KEY_LOGIN_LIMIT);
      \Session::delete(self::KEY_LAST_ACCESS);
      return \Auth::logout();
   }
}