記一次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之後,方便很多,有了更直接的方法
但是這個不適用於多使用者認證,所以這方面我直接還原回5.4版本
需要修改app/Http/Kernel.php和\Illuminate\Auth\Middleware\Authenticate::class
app/Http/Kernel.php中
改回
'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
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 協議》,轉載必須註明作者和本文連結