[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')
);
}
...
}
沒想到這麼簡單,真是出乎我的意料。
留言
張貼留言