• <button id="eiyoe"><acronym id="eiyoe"></acronym></button>
    <em id="eiyoe"></em>

  • <rp id="eiyoe"><acronym id="eiyoe"><input id="eiyoe"></input></acronym></rp>
      查看: 117|回復: 0
      上一主題 下一主題

      Laravel實現登錄跳轉功能

      79910

      主題

      0

      好友

      積分

      離線 發信

      跳轉到指定樓層
      樓主
      發表于 2021-09-16 07:37 | 只看該作者 | 倒序瀏覽

      前言

      登錄跳轉:
      不同的用戶在登錄成功之后跳轉到不同的網頁當中

      例如:網站管理員登錄成功后跳轉到網站后臺,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登錄跳轉內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

      來源:http://www.jb51.net/article/219013.htm