2

我最近开始学习 Laravel。我redirectTo()在我的 Laravel 应用程序中覆盖了默认 LoginController 中的方法。

class LoginController extends Controller
{
    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

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

    protected function redirectTo()
    {
        return '/dashboard';
    }
}

它工作正常,但如果已经通过身份验证的用户尝试再次登录(用户尚未注销并尝试访问“/login”路由),用户将被重定向到“/home”,这显然是 RouteServiceProvider::HOME持续的。我可以简单地更改 RouteServiceProvider::HOME 常量,但肯定有更好的选择。此外,如果重定向取决于用户的角色,那么简单地更改常量不会有任何好处。那么覆盖 RouteServiceProvider::HOME 常量的正确方法是什么?

4

4 回答 4

6

它不是一种方法,而是一个常数。你可以改变它app\Providers\RouteServiceProviders.php 你会发现这一行:

public const HOME = '/home';

随心所欲地改变它。如果您不想更改它并且只在本地更改它

protected $redirectTo = RouteServiceProvider::HOME;

线到

protected $redirectTo = '/whatever'
于 2020-05-03T16:44:29.863 回答
0

在 Laravel 8 中,您可以修改 App\Http\Controllers\Auth\AuthenticatedSessionController。在函数 Store() 的最后一行,您可以将常量 ::HOME 替换为同一控制器中返回字符串的函数,如下面的示例。

public function store(LoginRequest $request)
{
    $request->authenticate();

    $request->session()->regenerate();

    return redirect()->intended(self::home($request));
}

public static function home(LoginRequest $request) : string {

    $user_type = UserType::find($request->user_type_id);
    
    if ($user_type->name == 'Admin') {
        return '/dashboard';
    }

    return '/home';

}

此示例使用 $request 数据,但您也可以使用 Session 代替。

于 2021-11-15T02:25:26.220 回答
0

在 Laravel8 中,您可以在 LoginController 中覆盖以下方法

protected function authenticated(Request $request, $user)
{
    return redirect('/dashboard');
}

并在 app\Http\Middleware\RedirectIfAuthenticated.php

public function handle($request, Closure $next, $guard = null)
{
    
    
    if (Auth::guard($guard)->check()) {
        
        return redirect('/dashboard');
        
        //return redirect(RouteServiceProvider::HOME);

    }

    return $next($request);
}
于 2021-04-04T20:10:29.220 回答
0

如果需要动态属性,还可以覆盖 redirectTo 方法。

/**
 * @return string
 */
public function redirectTo() : string
{
    return '/dashboard';
}
于 2021-04-26T13:33:44.137 回答