laravel由5.4版本直接升級7.x版本筆記

semlie1994發表於2020-08-02

記一次laravel5.4直接升級7.x筆記

由於我們公司使用框架一直是laravel5.4,所以最近學習這個框架,框架優點我就不多說了,最近發現7.x版本比5.4好,所以乾脆試著直接嘗試升級。以防忘記,所以乾脆幾下遇到的一些問題。

1. 多使用者認證重定向未認證使用者

只要涉及多使用者認證,未認證使用者型別就多了,就必定會涉及重定向問題,每種使用者必定重定向到不同的登陸介面。

5.4版本時問題已解決
重寫Handler.php中的unauthenticated方法:

protected function unauthenticated($request, AuthenticationException $exception)
{
  if ($request->expectsJson()) {
     return response()->json(['error' => 'Unauthenticated.'], 401);
     }  switch ($exception->guards()[0]){
         case 'admin':
              return route('admin_login');
         case 'source':
             return route('source_login'); 
        case 'users':
             return route('manager_login'); 
         case 'test':
             return route('test_login'); 
         case 'inspectoral':
              return route('ins_login'); 
        default:
             return route('admin_login');
     }
 }

升級7.x之後,方便很多,有了更直接的方法

laravel由5.4版本直接升級7.x版本筆記

但是這個不適用於多使用者認證,所以這方面我直接還原回5.4版本
需要修改app/Http/Kernel.php和\Illuminate\Auth\Middleware\Authenticate::class
app/Http/Kernel.php中

laravel由5.4版本直接升級7.x版本筆記
改回

'auth' => \Illuminate\Auth\Middleware\Authenticate::class,

\Illuminate\Auth\Middleware\Authenticate::class中修改成

 /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string[]  ...$guards
     * @return mixed
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    public function handle($request, Closure $next, ...$guards)
    {
        $this->authenticate($request, $guards);

        return $next($request);
    }

    /**
     * Determine if the user is logged in to any of the given guards.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  array  $guards
     * @return void
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    protected function authenticate($request, array $guards)
    {
        if (empty($guards)) {
            $guards = [null];
        }

        foreach ($guards as $guard) {
            if ($this->auth->guard($guard)->check()) {
                return $this->auth->shouldUse($guard);
            }
        }

        $this->unauthenticated($request, $guards);
    }

    /**
     * Handle an unauthenticated user.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  array  $guards
     * @return void
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    protected function unauthenticated($request, array $guards)
    {
        throw new AuthenticationException(
            'Unauthenticated.', $guards
        );
    }

這樣就回到5.4版本了

2. CSRF 保護問題

很顯然,在7.x版本中 CSRF 保護更徹底以及完善,升級7.x
之後,原來的一些請求就會報錯,所以要特別注意X-CSRF-TOKEN

laravel由5.4版本直接升級7.x版本筆記

3.檔案上傳路徑修改

為方便直接訪問上傳檔案,在5.4版本時就把上傳檔案資料夾修改到public中,7.x中這方面會有點不同。

需要修改filesystems 配置檔案

   'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => public_path('storage'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => public_path('storage'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
        ]

    ],

修改完以上問題後,系統勉強能用,也許還會出現問題,但我們會盡快解決,也會盡量記下來。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章