首页 > 解决方案 > 在 Laravel Auth 中自定义重定向

问题描述

我想自定义 Laravel Auth。我想区分管理员和用户。在默认用户表中,我添加了具有两个选项的列角色:管理员和用户。根据手册,我正在定义redirectTo方法。

class LoginController extends Controller
{
    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     */

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    protected function redirectTo()
    {
        if (Auth::user()->role == 'admin') {
            return 'admin/home';
        } else {
            return '/main';
        }
    }

    protected function show_admin_homepage()
    {
        return view('auth.admin_h');
    }

    protected function show_user_homepage()
    {
        return view('auth.user_h');
    }
}

路线

Route::get('main', 'Auth\LoginController@show_user_homepage')->name('show_user_homepage');
Route::get('admin/home', 'Auth\LoginController@show_admin_homepage')->name('show_admin_homepage');

问题是当我以用户或管理员身份登录时,我总是重定向到默认的 laravel 主页视图。我做错了什么?

标签: laravellaravel-routinglaravel-authentication

解决方案


默认登录控制器使用AuthenticatesUsers特征。在 trait 中,在登录控制器中定义了一个名为authenticated的受保护方法。

下面是认证方法的实现

protected function authenticated($request, $user)
{
    if($user->role == 'admin')
    {
        return redirect('/admin/dashboard');
    }
    else if($user->role == 'user')
    {
        return redirect('/dashboard');
    }
}

推荐阅读