Laravel實(shí)現(xiàn)登錄跳轉(zhuǎn)功能
前言
登錄跳轉(zhuǎn):
不同的用戶在登錄成功之后跳轉(zhuǎn)到不同的網(wǎng)頁(yè)當(dāng)中
例如:網(wǎng)站管理員登錄成功后跳轉(zhuǎn)到網(wǎng)站后臺(tái),vip用戶登錄成功后跳轉(zhuǎn)到vip頁(yè)面
準(zhǔn)備工作
用戶表
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;
分別錄入系統(tǒng)管理員、vip用戶和普通用戶
使用redirectPath和middeware實(shí)現(xiàn)安全的登錄跳轉(zhuǎn)
1)appHttpControllersAuthLoginController.php下復(fù)寫redirectPath方法
判斷登錄的用戶,實(shí)現(xiàn)不同的跳轉(zhuǎn)頁(yè)
//復(fù)寫redirectPath實(shí)現(xiàn)登錄跳轉(zhuǎn) public function redirectPath() { switch (auth()->user()->role) { case 'admin': return 'admin/dashboard'; case 'vip': return 'vip/dashboard'; default: return '/home'; } }
2)創(chuàng)建Isvip和Isadmin中間件過濾越權(quán)訪問用戶
php artisan make:middleware Isvip php artisan make:middleware Isadmin
Isvip
public function handle($request, Closure $next) { //如果是vip則往下執(zhí)行邏輯 if(auth()->user()->role === 'vip'){ return $next($request); } //不是vip則跳轉(zhuǎn)到首頁(yè) return redirect('/home'); }
Isadmin
public function handle($request, Closure $next) { //如果是管理員則往下執(zhí)行邏輯 if(auth()->user()->role === 'admin'){ return $next($request); } //不是管理員則跳轉(zhuǎn)到首頁(yè) return redirect('/home'); }
appHttpKernel.php注冊(cè)Isadmin和Isvip中間件
protected $routeMiddleware = [ IlluminateAuthMiddlewareEnsureEmailIsVerified::class, 'admin' => AppHttpMiddlewareIsadmin::class, 'vip' => AppHttpMiddlewareIsvip::class, ];
路由中加入中間件進(jìn)行訪問過濾
//中間件檢查訪問該目錄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']);
優(yōu)化在不使用復(fù)寫redirectPath方法下實(shí)現(xiàn)登錄跳轉(zhuǎn)
創(chuàng)建UserRoleRedirect中間件用于不同用戶登錄跳轉(zhuǎn)不同頁(yè)面功能實(shí)現(xiàn)
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); }
路由使用結(jié)合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']);
到此這篇關(guān)于Laravel實(shí)現(xiàn)登錄跳轉(zhuǎn)功能的文章就介紹到這了,更多相關(guān)Laravel登錄跳轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
版權(quán)聲明:
本站所有文章和圖片均來(lái)自用戶分享和網(wǎng)絡(luò)收集,文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請(qǐng)勿用于商業(yè)用途,如果損害了您的權(quán)利,請(qǐng)聯(lián)系網(wǎng)站客服處理。