Laravel 5.4 登录后重定向到自定义网址

2022-08-30 10:15:40

我正在使用Laravel框架5.4.10,并且我正在使用常规身份验证

php artisan make:auth

提供。我想保护整个应用程序,并在登录后将用户重定向到/themes。

我有4个控制器:ForgotPasswordController.php,LoginController.php,RegisterController.php和ResetPasswordController.php。我已将此行编辑为最后三行:

protected $redirectTo = '/themes';

这是我的路线/网络中的第一行.php:

Auth::routes();

我已经在我的控制器中添加了这个函数.php:

    public function __construct()
    {
        $this->middleware('auth');

    }

我已经编辑了app / Http / Middleware / RedirectIfAuthenticated.php,因此句柄函数如下所示:

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

    return $next($request);
}

一切都很好,除了当我点击登录按钮时,我被重定向到“/”,而不是“/themes”。如果我不需要在控制器中进行身份验证(控制器.php文件中没有__contruct功能),则在登录时我会被重定向为OK。我做错了什么?


答案 1

您需要在登录控制器中添加以下行:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;

use Illuminate\Foundation\Auth\AuthenticatesUsers;

use Illuminate\Http\Request;

class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/

use AuthenticatesUsers;


protected function authenticated(Request $request, $user)
{
if ( $user->isAdmin() ) {// do your magic here
    return redirect()->route('dashboard');
}

 return redirect('/home');
}
/**
 * Where to redirect users after login.
 *
 * @var string
 */
//protected $redirectTo = '/admin';

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

答案 2

如果查看“身份验证用户”特征,您将看到在 sendLoginResponse 方法中,有对 的调用。如果您查看此方法,那么您会发现 redirectTo 可以是方法,也可以是变量。$this->redirectPath()

这就是我现在在身份验证控制器中所拥有的内容。

public function redirectTo() {
    $user = Auth::user();
    switch(true) {
        case $user->isInstructor():
            return '/instructor';
        case $user->isAdmin():
        case $user->isSuperAdmin():
            return '/admin';
        default:
            return '/account';
    }
}

推荐