Laravel debug 只向指定用戶/指定IP 顯示

前言

系統推出後,可能會預到無法預計的錯誤,在我們的測試環境中試了無數次也沒有發生問題,但一旦開放了用戶的CURD我們就會發現多了些ERROR404/ERROR500,你可以去找log file 來查找bug,但太低率了,我們希望是admin 帳號登入後才會看到報錯內容,這次我們針對的是:內置的debug,也就是.env中的APP_DEBUG

同時:可參考上一篇文章:Laravel Debug Bar 只顯示給admin或指定用戶,因為情況極為相似,但需要的用戶卻不一樣,因為上次的是一個插件,而本次則是一個內置功能的關開設定

方法1. 針對IP

這是最簡單的,但卻不是太方便,因為如果你換了IP則每次都要去這個文件修改

在 config/app.php 找到 debug

127.0.0.1 設定為你自己的IP

   'debug' => env('APP_DEBUG', $_SERVER['REMOTE_ADDR'] == '127.0.0.1' ? true : false),

方法2. 針對管理員身分做設定

前期準備,簡易會員系統,用Jetstream為例

有關怎麼做管理員的可參考這2篇文章:

必要:Laravel/Jetstream 試用

非必要: 基於Laravel/Jetstream做一個獨立後台

上面的文章是教你做個簡單的後台,但你都學會用 Jetstream 來做管理員並登入做後台了,那麼Jetstream是全域名通用的,你在網台前台也是有管理員身份的 我們以

1. 把.env 中的設定刪除

把這行刪了,不管是ture還是false

APP_DEBUG = false  

2. 在 config/app.php 找到 debug 並設定為 false

'debug' => false,

下面的步驟跟之前那篇文章是一樣的

3. 在 config/app.php 找aliases 加入一行

    'aliases' => [
        ...
        'Debugbar' => Barryvdh\Debugbar\Facades\Debugbar::class,
        ...
    ],

4. 建立一個 middleware 中間件

這邊比如我改名叫DebugBar

php artisan make:middleware DebugBar

系統會生成一個 app/Http/Middleware/DebugBar.php

5. 打開編輯 app/Http/Middleware/DebugBar.php

下面是我的參考代碼,你可按你自己理想的限制,給指定的人,甚至是指定的IP,才提供Debug Bar 顯示

下面的第12行第16行是上一篇教學的代碼,也建議你使用這套插件測試效率

本篇教學的重點設定是第18行

<?php

namespace App\Http\Middleware;

use Auth;
use Closure;
use Config;

class DebugBar {

    public function handle($request, Closure $next, $guard = null) {
        app('debugbar')->disable();  //預設給所有人是關閉的

         //假設管理員的id是1號,也只有一位管理員
        if (Auth::check() && Auth::user()->id == 1) { 
            app('debugbar')->enable();  //如果是管理員將debugbar打開

            Config::set('app.debug', true);

        }

        return $next($request);
    }

}

6. 前往 app/Http/Kernel.php,找到middlewareGroups下的web, 加入剛剛新增的middleware

    protected $middlewareGroups = [
        'web' => [
        ......
            \App\Http\Middleware\DebugBar::class,
        .....
        ]

後記

其實2個方法都會用到,因為有時候有一些錯誤只有會員身分才會看到的,所以你必須登入其他帳號去做測試,甚至有時候某些bug 是非用戶才看到的,你卻無法登入admin身分去在線debug,這時候方法1就派上用場