Laravel Authenticated Redirect 認證導入教學
前言
這篇文章我要分享如果改名登入後的預設路徑。目前登錄後使用者是去/home這個路徑。但是我的Application有3種不同使用者(工地主任,採購單位,管理者),每一個不同的role登陸後要進入他們各自的後台。要達到這個功能我們要改兩個地方: LoginController 跟RedirectIfAuthenticated。
LoginController 這裡負責登陸後的路徑。我們要改redirectTo這個method。以下是程式碼。首先我們要取得使用者權限(role),然後用一個簡單的switch切換每一個使用者到他們各自的後台(Dashboard)。
這一段程式碼還蠻簡單的,應該一看就懂。
// LoginController.php
// protected $redirectTo = RouteServiceProvider::HOME;
public function redirectTo()
{
// User role
$role = Auth::user()->role;
// Check user role
switch ($role) {
case 'manager':
return '/manager/dashboard';
break;
case 'procurement':
return '/procurement/dashboard';
break;
case 'site-manager':
return '/site-manager/dashboard';
break;
default:
return '/login';
break;
}
}
第二個部分是RedirectIfAuthenticated.php, 這裡負責的是如果你已經登陸了(Authenticated)。你的預設網頁是什麼。這邊寫法跟上方差不多,只是這裡是用if statement。Auth::guard($guard)->check() 是檢查使用者是否已經登陸,那後面是檢查角色(role)是什麼。
所以這樣子寫完之後,登陸後。之後再回來網頁,預設網頁就是使用的後台。
```php
// 原本
public function handle($request, Closure $next, $guard = null)
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
}
// 改成
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check() && Auth::user()->role == 'manager') {
return redirect()->route('manager-dashboard');
}
if (Auth::guard($guard)->check() && Auth::user()->role == 'procurement') {
return redirect()->route('procurement-dashboard');
}
if (Auth::guard($guard)->check() && Auth::user()->role == 'site-manager') {
return redirect()->route('site-manager-dashboard');
}
return $next($request);
}
```
這一篇文章教學就到這裡,希望有幫到你。
影片教學
資源
Laravel: Redirect different user roles differently
Learn how to redirect authenticated users to corresponding path in Laravel