当前位置:首页 > CMS教程 > 其它CMS > 列表

Laravel实现登录跳转功能

发布:smiling 来源: PHP粉丝网  添加日期:2022-05-11 10:41:01 浏览: 评论:0 

网站管理员登录成功后跳转到网站后台,vip用户登录成功后跳转到vip页面,跳转功能怎么实现的呢,下面小编给大家带来了Laravel实现登录跳转功能,需要的朋友可以参考下。

前言

登录跳转:

不同的用户在登录成功之后跳转到不同的网页当中

例如:网站管理员登录成功后跳转到网站后台,vip用户登录成功后跳转到vip页面

准备工作

用户表

  1. CREATE TABLE `users` ( 
  2.   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
  3.   `namevarchar(191) COLLATE utf8mb4_unicode_ci NOT NULL
  4.   `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL
  5.   `role` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'normal'
  6.   `email_verified_at` timestamp NULL DEFAULT NULL
  7.   `passwordvarchar(191) COLLATE utf8mb4_unicode_ci NOT NULL
  8.   `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  9.   `created_at` timestamp NULL DEFAULT NULL
  10.   `updated_at` timestamp NULL DEFAULT NULL
  11.   PRIMARY KEY (`id`), 
  12.   UNIQUE KEY `users_email_unique` (`email`), 
  13.   KEY `users_role_index` (`role`) 
  14. ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 

分别录入系统管理员、vip用户和普通用户

Laravel实现登录跳转功能

使用redirectPath和middeware实现安全的登录跳转

1)app\Http\Controllers\Auth\LoginController.php下复写redirectPath方法

判断登录的用户,实现不同的跳转页

  1. //复写redirectPath实现登录跳转 
  2.     public function redirectPath() 
  3.     { 
  4.         switch (auth()->user()->role) { 
  5.             case 'admin'
  6.                 return 'admin/dashboard'
  7.             case 'vip'
  8.                 return 'vip/dashboard'
  9.             default
  10.                 return '/home'
  11.         } 
  12.     } 

2)创建Isvip和Isadmin中间件过滤越权访问用户

php artisan make:middleware Isvip

php artisan make:middleware Isadmin

Isvip

  1. public function handle($request, Closure $next
  2.     { 
  3.         //如果是vip则往下执行逻辑 
  4.         if(auth()->user()->role === 'vip'){ 
  5.             return $next($request); 
  6.         } 
  7.         //不是vip则跳转到首页 
  8.         return redirect('/home'); 
  9.     } 

Isadmin

  1. public function handle($request, Closure $next
  2.     { 
  3.         //如果是管理员则往下执行逻辑 
  4.         if(auth()->user()->role === 'admin'){ 
  5.             return $next($request); 
  6.         } 
  7.         //不是管理员则跳转到首页 
  8.         return redirect('/home'); 
  9.     } 

app\Http\Kernel.php注册Isadmin和Isvip中间件

  1. protected $routeMiddleware = [ 
  2. \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class
  3.         'admin' => \App\Http\Middleware\Isadmin::class
  4.         'vip' => \App\Http\Middleware\Isvip::class
  5.     ]; 

路由中加入中间件进行访问过滤

  1. //中间件检查访问该目录admin/dashboard是否为admin用户,过滤不合格的用户 
  2. Route::get('admin/dashboard'function (){ 
  3.     return view('admin.dashboard'); 
  4. })->middleware(['auth','admin']); 
  5.  
  6. //中间件检查访问该目录vip/dashboard是否为vip用户,过滤不合格的用户 
  7. Route::get('vip/dashboard'function (){ 
  8.     return view('vip.dashboard'); 
  9. })->middleware(['auth','vip']); 

优化在不使用复写redirectPath方法下实现登录跳转

创建UserRoleRedirect中间件用于不同用户登录跳转不同页面功能实现

php artisan make:middleware UserRoleRedirect

UserRoleRedirect逻辑代码

  1. public function handle($request, Closure $next
  2.     { 
  3.         switch (auth()->user()->role) { 
  4.             case 'admin'
  5.                 return redirect('admin/dashboard'); 
  6.             case 'vip'
  7.                 return redirect('vip/dashboard'); 
  8.             default
  9.  
  10.                 break
  11.         } 
  12.  
  13.         return $next($request); 
  14.     } 

路由使用结合admin和vip中间件过滤

  1. Route::get('/home'function () { 
  2.     return view('welcome'); 
  3. })->middleware(['auth','auth.redirect']); 
  4.  
  5. Auth::routes(); 
  6.  
  7. //中间件检查访问该目录admin/dashboard是否为admin用户,过滤不合格的用户 
  8. Route::get('admin/dashboard'function (){ 
  9.     return view('admin.dashboard'); 
  10. })->middleware(['auth','admin']); 
  11.  
  12. //中间件检查访问该目录vip/dashboard是否为vip用户,过滤不合格的用户 
  13. Route::get('vip/dashboard'function (){ 
  14.     return view('vip.dashboard'); 
  15. })->middleware(['auth','vip']);

Tags: Laravel登录跳转

分享到: