Thinkphp5全部頁面驗證用戶是否登錄

新建Base.php控制器,全部的頁面繼承自它

<?php
namespace app\index\controller;
use think\Controller;

class Base extends Controller
{
    public function __construct(){
        /**
         * 不驗證用戶登錄的頁面
         */

        //不驗證用戶登錄的頁面
        $exception_arth_list=[
            'member/users/login', //登錄頁面
            'member/users/reg'    //註冊頁面
        ];
        $redirect_url='member/users/login';
        $this->checkUserLogin($redirect_url,$exception_arth_list);
    }

   
    /**
    *  檢查用戶是否登錄,登錄時跳轉到登錄頁面
    *  $redirect_url 要跳的url (不區別大小寫) [str] 例: 'member/Users/login'
    *  $exception_arth_list [array] 不驗證用戶登錄的頁面地址(不區別大小寫) 例:     ['member/user/login','member/Users/reg']
    *  $msg 跳轉前的提示信息
    */
    protected function checkUserLogin($redirect_url,$exception_arth_list=[],$msg='')
    {
        if(!is_string($redirect_url) || !is_array($exception_arth_list) || !is_string($msg) ){
            die('傳入的參數錯誤.');
        }
      
        //獲取到當前訪問的頁面
        $module=request()->module();//獲取當前訪問的模塊
        $controller=request()->controller();//獲取當前訪問的控制器
        $action= request()->action();//獲取當前訪問的方法
        $current_auth_str=$module.'/'.$controller.'/'.$action; //轉成字符串
       
        //不驗證用戶登錄的頁面
        //把數組裏的所有轉小寫
        if(!empty($exception_arth_list) && is_array($exception_arth_list)){
            foreach($exception_arth_list as &$v){
                if(!is_string($v)){
                    die('不驗證頁面數組裏的值只能爲字符串類型.');
                }
                $v=strtolower($v);
            }
        }
        //當前訪問的頁面$current_auth_str轉爲全小寫後,若是不在$exception_arth_list客戶中就驗證用戶是否登錄
        if(!empty($exception_arth_list) && is_array($exception_arth_list)){
            if(!in_array(strtolower($current_auth_str),$exception_arth_list)){
                if (!session('user_id')) {
                    if($msg == ''){
                        $this->redirect($redirect_url);
                    }else{
                        $this->error('請先登錄.', $redirect_url);

                    }
                }
            }
        }
    }
}
相關文章
相關標籤/搜索