# laravel 登入之後,回到按登入按鈕的頁面 #### 感覺網路上的資料很少,依靠破破的英文找到解法。 ##### laravel 版本7 :::success 要達到這個目標,有兩個步驟,需要修改兩個檔案。 ::: :::info 步驟一 在專案資料夾中,找到以下檔案。 app\Http\Middleware\RedirectIfAuthenticated.php 這是負責導向驗證頁面的middleware檔案 ::: 原版的函式如下: ```php= public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { return redirect(RouteServiceProvider::HOME); } return $next($request); } ``` 修改版的函式如下: ```php= public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { // return redirect(RouteServiceProvider::HOME); // 上面是原版 return redirect()->intended('/'); } return $next($request); } ``` 對照圖如下,藍色底線是原版的程式碼,橘色底線是新增的程式碼。 ![](https://i.imgur.com/qHBxKTz.png) :::info 步驟二 在專案資料夾中找到以下檔案。 app\Http\Controllers\Auth\LoginController.php 這是負責管理登陸的controller檔案。 這個檔案不需要修改原本的程式碼,而是將程式碼新增到裡面,一般新增到最下面。 要記得這段程式碼還是被class{}包起來的,然後要加上註解幫助你記憶跟辨認。 ::: ```php= // 下面是新程式碼,可以實現在哪個頁面按登入按鈕,就可以在登入後回到那個頁面。 public function showLoginForm() { // Get URLs $urlPrevious = url()->previous(); $urlBase = url()->to('/'); // Set the previous url that we came from to redirect to after successful login but only if is internal if(($urlPrevious != $urlBase . '/login') && (substr($urlPrevious, 0, strlen($urlBase)) === $urlBase)) { session()->put('url.intended', $urlPrevious); } return view('auth.login'); } ``` :::success 好了,這樣就大功告成了,去試試看吧。 ::: ###### tags: `laravel` `laravel.7`