Laravel中的多重身份验证和用户重定向

时间:2019-03-01 15:19:26

标签: laravel

我的用户表中有一个名为role的列,该列存储每个注册用户的使用类型。我想在成功注册后将每种类型的用户路由到其他仪表板。 这是仪表板的路线

//Dashboards
Route::get('/operations', 'HomeController@operations')->name('operations')->middleware('verified'); //Operations dashboard
Route::get('/clients', 'HomeController@clients')->name('clients')->middleware('verified'); //clients dashboard
Route::get('/humanResource', 'HomeController@humanResource')->name('humanResource')->middleware('verified'); //HR dashboard

这是HomeController

public function operations()
{

    if(Auth::user()->role == 'Operations'){

        return view('operations');

    }else{
        return redirect()->back();
    }

}

public function clients()
{

    if(Auth::user()->role == 'Client'){

        return view('clients');

    }else{
        return redirect()->back();
    }

}


public function humanResource()
{

    if(Auth::user()->role == 'Human Resource Manager'){

        return view('humanResource');

    }else{
        return redirect()->back();
    }

}

这是我的RegisterController

protected function redirectTo()
{
    // User role
    $role = Auth::user()->role;

    // Check user role
    switch ($role) {
        case 'Operations':
            return '/operations';
            break;

        case 'Client':
            return '/clients';
            break;


        case 'Human Resource Manager':
            return '/humanResource';
            break;

        default:
            return '/login';
            break;
    }
}

我还将上面的代码添加到了VerificationController.phpLoginController.phpResetPasswordController中 这是我的RedirectIfAuthenticated.php

// protected $redirectTo = '/home';

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {

        // return redirect('/home');

        function redirectTo()
        {
            // User role
            $role = Auth::user()->role;

            // Check user role
            switch ($role) {
                case 'Operations':
                    return '/operations';
                    break;

                case 'Client':
                    return '/clients';
                    break;

                case 'Human Resource Manager':
                    return '/humanResource';
                    break;

                default:
                    return '/login';
                    break;
            }
        }
    }

    return $next($request);
}

当前,如果我将用户注册为Operations,则代码可以正常工作,但如果我尝试将用户注册为ClientHuman Resource Manager,则代码会在重定向后将我重定向回登录页面电子邮件验证。如果我检查数据库,我将看到该用户已创建。如果我尝试使用Client的详细信息登录,它将把我重定向到登录页面,并在导航栏中显示Client的用户名(表示用户已成功登录,但找不到他的仪表板)。我猜测问题出在我的Switch-case语句中……仅适用于第一种情况,即操作。

0 个答案:

没有答案