[Laravel 8.x] 不在 middleware 判斷是否需要登入後才能看
平常要讓 route 登入後才能使用,會直接使用 auth middleware,如果未登入該 middleware 會導向登入頁進行登入後再回來,在這種情況下程式不會進入 controller。
如果想在 controller 判斷登入才可以使用,未登入也能導向登入頁再回來該怎麼做呢?
稍微爬一下 auth middleware 程式就可以得到答案,裡面有一個 function 在處理未登入要做什麼事情(如下↓),可以看到裡面就只是簡單拋出 AuthenticationException。
如果想在 controller 判斷登入才可以使用,未登入也能導向登入頁再回來該怎麼做呢?
稍微爬一下 auth middleware 程式就可以得到答案,裡面有一個 function 在處理未登入要做什麼事情(如下↓),可以看到裡面就只是簡單拋出 AuthenticationException。
/** * 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, $this->redirectTo($request) ); }所以我們可以學他,如果未登入就拋出 AuthenticationException (如下↓),三個參數分別是訊息內容、guards、導向網址。
use Auth; use Illuminate\Auth\AuthenticationException; use Illuminate\Http\Request; public function show(Request $request) { if (!Auth::check()) { throw new AuthenticationException( 'Unauthenticated.', [null], route('login') ); } ... }沒想到這麼簡單,真是出乎我的意料。
留言
張貼留言