巅云php学苑
近期车展
最新发布
快速导航

Laravel实现登录跳转功能

后端开发 / php / 2022-04-03 21:43
visits visits 440 collect - report - QRcode

Basicinformation

content

前言

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

例如:网站管理员登录成功后跳转到网站后台,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)appHttpControllersAuthLoginController.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");
    }

appHttpKernel.php注册Isadmin和Isvip中间件

protected $routeMiddleware = [
IlluminateAuthMiddlewareEnsureEmailIsVerified::class,
        "admin" => AppHttpMiddlewareIsadmin::class,
        "vip" => AppHttpMiddlewareIsvip::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登录跳转内容请搜索IT博客社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT博客社区!

notmore

Users comments(0)

rate100%
  • notmore
+ more
  • contacts:
  • area:
  • tel: total(2007)twigs area:unknown

联系我们

合作或咨询可通过如下方式:

QQ/微信:123456

网址:www.xxxx.cn

微信公众号:车展门票

关于本站

「车展网www.xxxxxxx.cn」是一个集全国各地品牌经销车商的平台,让您在所在城市,第一时间收到车展的最新消息,让您的试驾、选车、购车、贷车一步到位,更多优惠直达客户,无需东奔西走,带上中意的车回家,让您省钱,更省心。

Copyright 车展网 www.xxxx.cn Reserved渝ICP备xxxxxxxx号

关注我们