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!

推薦閱讀: