laravel 登陸后跳轉

在開發 web 應用程序時,用戶登錄認證是一個必不可少的功能。laravel 框架提供了多種方式實現用戶認證,而且還提供了一套默認的身份認證系統(即 laravelilluminateauth),方便開發者在應用程序中實現用戶注冊、登錄、退出等功能。

對于登錄認證成功后,我們常常希望跳轉到特定頁面,比如用戶的個人資料頁,或者某個特定功能頁。在 Laravel 框架中,實現登錄后跳轉非常簡單。

本文將介紹 Laravel 框架中用戶登錄后跳轉的幾種方式。

Laravel 框架默認的登錄跳轉

LaravelIlluminateAuth 提供的身份認證系統默認配置了用戶登錄后的跳轉。在 config/auth.php 配置文件中,有如下默認配置:

'redirect' => [     'login' => '/login',     'logout' => '/logout',     'home' => '/home',     'register' => '/register',     'verify' => '/email/verify',     'reset' => '/password/reset',     'confirm' => '/password/confirm',   ],

其中,’home’ 表示登錄后的跳轉頁面,默認為 /home 路徑。如果需要修改默認跳轉頁面,只需要將該路徑修改為自己想要的頁面即可。

手動指定跳轉路徑

如果需要在控制器中手動指定登錄后的跳轉頁面,我們可以使用 Laravel 框架提供的 RedirectResponse 實例,通過 redirect() 方法實現。

例如,在用戶控制器中,我們可以重寫 IlluminateFoundationAuthAuthenticatesUsers trait 中的 authenticated() 方法:

use IlluminateSupportFacadesAuth;  class UserController extends Controller {     use AuthenticatesUsers;      protected function authenticated(Request $request, $user)     {         return redirect()->route('user.show', $user->id);     } }

上述代碼可以在用戶登錄成功后,跳轉到指定的用戶個人資料頁。

重定向到先前頁面

有時候,我們需要將用戶登錄后的跳轉路徑設置為登錄之前的頁面,可以使用 Laravel 提供的 Session() 函數和 URL::previous() 方法。

例如,在登錄控制器中,我們可以這樣實現:

use IlluminateHttpRequest; use IlluminateSupportFacadesAuth; use IlluminateSupportFacadesURL;  class LoginController extends Controller {     public function login(Request $request)     {         $credentials = $request->only('email', 'password');         if (Auth::attempt($credentials)) {             return redirect()->intended(URL::previous());         }         return back()->withErrors(['email' => '登錄失敗']);     } }

在上述代碼中,我們使用了 redirect()->intended() 方法,該方法會將用戶重定向到登錄之前訪問的頁面。如果用戶之前沒有訪問過其他頁面,則會重定向至默認的登錄跳轉路徑。

使用中間件跳轉到指定頁面

Laravel 框架中間件提供了便捷的身份認證和授權功能。我們可以在某個中間件中指定登錄后的跳轉路徑。

例如,我們可以在 auth 中間件中配置登錄后的跳轉路徑:

namespace AppHttpMiddleware;  use IlluminateAuthMiddlewareAuthenticate as Middleware;  class Authenticate extends Middleware {     protected function redirectTo($request)     {         if (! $request->expectsjson()) {             return route('login'); // 設置默認的跳轉路徑         }     } }

在上述代碼中,我們使用 redirectTo() 方法來處理登錄失敗的請求。如果請求時期望返回 json 格式數據,則直接返回 401 錯誤;否則,將用戶重定向到登錄頁面。

如果需要指定其他的跳轉路徑,只需要修改 return 語句中的路由別名即可。

總結

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享