Laravel實現登入跳轉功能
阿新 • • 發佈:2021-08-09
前言
登入跳轉:
不同的使用者在登入成功之後跳轉到不同的當中
例如:管理員登入成功後跳轉到網站後臺,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.下複寫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'www.cppcns.com); })->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','vip']);
到此這篇關於Laravel實現登入跳轉功能的文章就介紹到這了,更多相關Laravel登入跳轉內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!