Переадресация Laravel 5.4 на пользовательский URL после входа в систему

Я использую Laravel Framework 5.4.10, и я использую обычную проверку подлинности,

php artisan make:auth 

обеспечивает. Я хочу защитить все приложение и перенаправить пользователей в / темы после входа в систему.

У меня есть 4 контроллера: ForgotPasswordController.php, LoginController.php, RegisterController.php и ResetPasswordController.php. Я редактировал эту строку в последние три:

 protected $redirectTo = '/themes'; 

Это первая строка на моих маршрутах / web.php:

 Auth::routes(); 

Я добавил эту функцию в свой Controller.php:

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

Я отредактировал приложение / Http / Middleware / RedirectIfAuthenticated.php, так что функция дескриптора выглядит так:

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

Все в порядке, за исключением случаев, когда я нажимаю кнопку «Логин», меня перенаправляют на «/», а не «/ themes». Если мне не требуется аутентификация в контроллерах (нет функции __contruct в файле Controller.php), я получаю перенаправление OK при входе в систему. Что я делаю не так?

Это то, что я работаю, что совпадение.

Вам также необходимо добавить следующие строки в свой LoginController

 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 margic 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']); } } 

Если вы посмотрите в признаке AuthenticatesUsers, вы увидите, что в методе sendLoginResponse есть вызов, сделанный в $this->redirectPath() . Если вы посмотрите на этот метод, вы обнаружите, что redirectTo может быть либо методом, либо переменной.

Это то, что я сейчас имею в своем контроллере.

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

То, как я это сделал, используя свойство AuthenticatesUsers.

\App\Http\Controllers\Auth\LoginController.php

Добавьте этот метод к этому контроллеру:

 /** * Check user's role and redirect user based on their role * @return */ public function authenticated() { if(auth()->user()->hasRole('admin')) { return redirect('/admin/dashboard'); } return redirect('/user/dashboard'); } 

Вы должны установить значение $ redirectTo для маршрута, для которого вы хотите перенаправить

 $this->redirectTo = route('dashboard'); 

внутри конструктора AuthController.

 /** * Where to redirect users after login / registration. * * @var string */ protected $redirectTo = '/'; /** * Create a new authentication controller instance. * * @return void */ public function __construct() { $this->middleware($this->guestMiddleware(), ['except' => 'logout']); $this->redirectTo = route('dashboard'); }