Try   HackMD

laravel 登入之後,回到按登入按鈕的頁面

感覺網路上的資料很少,依靠破破的英文找到解法。

laravel 版本7

要達到這個目標,有兩個步驟,需要修改兩個檔案。

步驟一
在專案資料夾中,找到以下檔案。
app\Http\Middleware\RedirectIfAuthenticated.php
這是負責導向驗證頁面的middleware檔案

原版的函式如下:

public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { return redirect(RouteServiceProvider::HOME); } return $next($request); }

修改版的函式如下:

public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { // return redirect(RouteServiceProvider::HOME); // 上面是原版 return redirect()->intended('/'); } return $next($request); }

對照圖如下,藍色底線是原版的程式碼,橘色底線是新增的程式碼。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

步驟二
在專案資料夾中找到以下檔案。
app\Http\Controllers\Auth\LoginController.php
這是負責管理登陸的controller檔案。
這個檔案不需要修改原本的程式碼,而是將程式碼新增到裡面,一般新增到最下面。
要記得這段程式碼還是被class{}包起來的,然後要加上註解幫助你記憶跟辨認。

// 下面是新程式碼,可以實現在哪個頁面按登入按鈕,就可以在登入後回到那個頁面。 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'); }

好了,這樣就大功告成了,去試試看吧。

tags: laravel laravel.7