当前位置: 首页 > 知识库问答 >
问题:

根据在laravel控制器中使用if条件提到的角色重定向到laravel登录用户中的不同视图

西门山
2023-03-14

在拉雷维尔,我有学生、家长、员工(教师、图书管理员、典狱长)等不同权限的角色。。。根据用户角色,它应该在用户登录时重定向到不同的刀片文件。。我的问题是,如果用户是家长或学生,它将重定向到不同的仪表板,但只要用户是教师或其他人,它就不会登录,但在用户表中,用户已经存在。

下面是我的LoginController代码

登录ontroller.php:

public function login(Request $request){


    if(Auth::attempt([

          'email'=>$request->email,
          'username'=>$request->username,
          'password'=>$request->password,


    ]))

    {
        $user=User::where('username',$request->username)->first();
        $usertype=$user->user_type;
        $username=$user->username;

        $roles=DB::table('roles')->where('id','=',$usertype)->first();

        $rolename=$roles->role_name;



        if($rolename=="student"){

           $student=DB::table('students')->where('stud_adm_id','=',$username)->first();
           $classid=$student->class_id;
           $sectionid=$student->section_id;
           $class=DB::table('classtables')->where('id',$classid)->first();
          $section=DB::table('sections')->where('id',$sectionid)->first();

          return view('studentdashboard',compact('student','class','section'));

        }elseif($rolename=="Teacher"){



          $employeedetails=DB::table('employees')->where('employee_fname','=',$username)->first();

        return view('teacherdashboard',compact('employeedetails'));

    }
        elseif($rolename=="parent"){

            $parentdetails=DB::table('parents')->where('mother_phone','=',$username)->first();
           $stateid=$parentdetails->state;
           $state=DB::table('states')->where('state_id','=',$stateid)->first();

            return view('parentdashboard',compact('parentdetails','state'));

      }

  }else{


 return redirect()->back();

  }
}

我的角色在角色表中提到,id存储在用户表中

提前感谢...

共有3个答案

劳嘉实
2023-03-14

通过重写一两个方法,您可以使用默认的LoginController执行所有您想要执行的操作。

您不应该从处理管线返回视图<代码>后重定向获取。POST进入后,返回一个重定向,该重定向导致GET请求(很可能返回一个视图)。

要验证登录凭据,请执行以下操作:

protected function validateLogin(Request $request)
{
    $this->validate($request, [
        'email' => '...',
        'username' => '...',
        'password' => '...',
    ]);
}

对于请求中应使用的凭据:

protected function credentials(Request $request)
{
    return $request->only('email', 'username', 'password');
}

成功身份验证后返回的响应:

protected function authenticated(Request $request, $user)
{
    // do your role checking here
    // return a redirect response to where you want that particular user type to go
    // return redirect()->route(...);
}

构建视图和收集数据相关的一切都是自己的路线。您所要做的就是返回登录流的重定向。重定向到的位置负责收集显示视图所需的数据。

太叔志文
2023-03-14

让我们忽略所有关于这个东西应该如何工作以及默认情况下它是如何工作的,然后拿走你所拥有的。

你在这里看到问题了吗:

if ($rolename == "student")

elseif ($rolename == "Teacher")

elseif ($rolename == "parent")

如果没有,让我们这样做:

student
Teacher
parent

哪一个和其他的不一样?哪一个是“不能正常工作”的?

我想假设这些角色的命名方式是一致的,因此Teacher应该是Teacher

况明贤
2023-03-14

你最好创建一个中间件来检查用户角色,并根据角色将用户重定向到不同的页面!

运行下面的命令创建一个检查用户角色的中间件。

php artisan make:middleware CheckRoleMiddleware

该命令将在App\Http\Middleware下创建一个名为checkrolemidleware的文件。该类将包含一个预定义的方法handle(),您可以将检查用户角色并将其重定向到不同页面的逻辑放置在该类中。例如:

<?php namespace App\Http\Middleware;

use Closure;

class CheckRoleMiddleware {

    public function handle($request, Closure $next)
    {
        //User role is admin
        if ( Auth::check() && Auth::user()->isAdmin() )
        {
            return $next($request);
        }

        //If user role is student
        if(Auth::check() && auth()->user()->role === 'student')
        {
             return view('studentDashboard');
             or route('routeName');
        }

        //If user role is teacher
        if(Auth::check() && auth()->user()->role ==='teacher')
        {

             return view('teacherDashboard');
             or route('routeName');

        }
        //default redirect
        return redirect('home');

    }

}

不要忘记将checkrolemidware添加到App\Http\Kernel。php

protected $routeMiddleware = [
    'auth' => 'App\Http\Middleware\Authenticate',
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
    'user-role' => 'App\Http\Middleware\CheckRoleMiddleware', // this line right here
];
 类似资料:
  • 是否可以将具有不同用户角色的用户重定向到laravel 5.1中的不同页面? 我研究了Auth中间件和Auth控制器,但没有发现任何处理登录请求本身的东西。 我发现了一些关于登录重定向在这里Laravel重定向回到原来的目的地后登录,但我不知道在哪里把建议的代码片段。 有人能帮我吗

  • 因此,在我们的Laravel应用程序中有两个角色(internet客户端和管理员)。下面是DB模式 我们想允许www.site。com/登录路径,仅记录具有“客户端”角色的用户。 请注意,一旦用户登录并强制注销,我们不想检查角色。 谢谢

  • 登录帧 菜单框架

  • 我正在尝试实现一个功能,在登录后,用户会根据其角色重定向到URL。我已经设置了角色部分,但是在登录后立即测试用户的属性时遇到了问题。 我按照这里的说明创建了一个用户登录页面。我有一个看起来像这样的: 我的函数验证用户,但我不知道如何在登录后立即访问用户对象。这就是我目前拥有的: 当我第一次尝试使用管理员帐户登录时,我会进入路径,因为此时没有任何经过身份验证的用户对象。 在尝试登录后,但是得到了一个

  • CakePHP Auth loginRedirect error/始终重定向到“users/login”,而我放置了不同的控制器。我的意思是,当我打开禁止页面时(不允许/要求登录) 它必须重定向到“玩家/索引”。我把登录重定向到“玩家”, 但它不起作用。它总是重定向到用户/登录,而不是玩家/索引,而我写'loginReDirect'= 这是我的代码: 我的桌子名称:players 为什么结果总是重

  • 我在Laravel框架中的HomeController.php中有一段代码,但是我无法访问它重定向到登录页面的索引/主页。我犯了什么大错?