Laravel實現登錄跳轉功能
前言
登錄跳轉:
不同的用戶在登錄成功之後跳轉到不同的網頁當中
例如:網站管理員登錄成功後跳轉到網站後臺,vip用戶登錄成功後跳轉到vip頁面
準備工作
用戶表
CREATE TABLE `users` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `role` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'normal', `email_verified_at` timestamp NULL DEFAULT NULL, `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `users_email_unique` (`email`), KEY `users_role_index` (`role`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
分別錄入系統管理員、vip用戶和普通用戶
使用redirectPath和middeware實現安全的登錄跳轉
1)app\Http\Controllers\Auth\LoginController.php下復寫redirectPath方法
判斷登錄的用戶,實現不同的跳轉頁
//復寫redirectPath實現登錄跳轉 public function redirectPath() { switch (auth()->user()->role) { case 'admin': return 'admin/dashboard'; case 'vip': return 'vip/dashboard'; default: return '/home'; } }
2)創建Isvip和Isadmin中間件過濾越權訪問用戶
php artisan make:middleware Isvip php artisan make:middleware Isadmin
Isvip
public function handle($request, Closure $next) { //如果是vip則往下執行邏輯 if(auth()->user()->role === 'vip'){ return $next($request); } //不是vip則跳轉到首頁 return redirect('/home'); }
Isadmin
public function handle($request, Closure $next) { //如果是管理員則往下執行邏輯 if(auth()->user()->role === 'admin'){ return $next($request); } //不是管理員則跳轉到首頁 return redirect('/home'); }
app\Http\Kernel.php註冊Isadmin和Isvip中間件
protected $routeMiddleware = [ \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'admin' => \App\Http\Middleware\Isadmin::class, 'vip' => \App\Http\Middleware\Isvip::class, ];
路由中加入中間件進行訪問過濾
//中間件檢查訪問該目錄admin/dashboard是否為admin用戶,過濾不合格的用戶 Route::get('admin/dashboard', function (){ return view('admin.dashboard'); })->middleware(['auth','admin']); //中間件檢查訪問該目錄vip/dashboard是否為vip用戶,過濾不合格的用戶 Route::get('vip/dashboard', function (){ return view('vip.dashboard'); })->middleware(['auth','vip']);
優化在不使用復寫redirectPath方法下實現登錄跳轉
創建UserRoleRedirect中間件用於不同用戶登錄跳轉不同頁面功能實現
php artisan make:middleware UserRoleRedirect
UserRoleRedirect邏輯代碼
public function handle($request, Closure $next) { switch (auth()->user()->role) { case 'admin': return redirect('admin/dashboard'); case 'vip': return redirect('vip/dashboard'); default: break; } return $next($request); }
路由使用結合admin和vip中間件過濾
Route::get('/home', function () { return view('welcome'); })->middleware(['auth','auth.redirect']); Auth::routes(); //中間件檢查訪問該目錄admin/dashboard是否為admin用戶,過濾不合格的用戶 Route::get('admin/dashboard', function (){ return view('admin.dashboard'); })->middleware(['auth','admin']); //中間件檢查訪問該目錄vip/dashboard是否為vip用戶,過濾不合格的用戶 Route::get('vip/dashboard', function (){ return view('vip.dashboard'); })->middleware(['auth','vip']);
到此這篇關於Laravel實現登錄跳轉功能的文章就介紹到這瞭,更多相關Laravel登錄跳轉內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 一篇文章學會Vue中間件管道
- 詳細談談MYSQL中的COLLATE是什麼
- Larave框架通過sanctum進行API鑒權詳解
- Thinkphp6.0中間件的具體使用
- MySQL校對規則(COLLATION)的具體使用