2017-01-06 7 views
3

Здесь является документация поLaravel перенаправление после входа

Когда пользователь успешно прошел проверку подлинности, они будут перенаправлены на /home URI. Вы можете настроить пост-аутентификации перенаправлять местоположение путем определения redirectTo собственности на LoginController, RegisterController и ResetPasswordController:

protected $redirectTo = '/';

Если путь переадресации необходим пользовательский поколение логики вы можете определить метод redirectTo вместо из redirectTo собственности:

protected function redirectTo() { // }

Так я определил его

protected function redirectTo() 
{ 
    if (\Auth::user()->isAdmin()) { 
     return '/dashboard'; 
    } else { 
     return '/home'; 
    } 
} 

Но, как вы можете догадаться, это не работает. Он всегда перенаправляется на /home.

Проходя через источники, я нашел этот

namespace Illuminate\Foundation\Auth; 

trait AuthenticatesUsers 
{ 
    ... 

    /** 
    * Send the response after the user was authenticated. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    protected function sendLoginResponse(Request $request) 
    { 
     $request->session()->regenerate(); 

     $this->clearLoginAttempts($request); 

     return $this->authenticated($request, $this->guard()->user()) 
       ?: redirect()->intended($this->redirectPath()); 
    } 
    ... 
} 

И это реализация $this->redirectPath()

namespace Illuminate\Foundation\Auth; 

trait RedirectsUsers 
{ 
    /** 
    * Get the post register/login redirect path. 
    * 
    * @return string 
    */ 
    public function redirectPath() 
    { 
     return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home'; 
    } 
} 

Я не могу найти, где он проверяет redirectTo метода.

Я использую Laravel 5.3.28, BTW.

Любые предложения?

РЕДАКТИРОВАТЬ

Это было исправлено в 5.3.29, в то время как я был на 5.3.29. Тем не менее я не могу помочь, но думаю, что с документами что-то не так, или этот вспомогательный помощник laravel, созданный для создания проектов Laravel. Я использовал его для создания проекта, и он получал не последнюю версию.

ответ

3

Override authenticated() функция вместо:

protected function authenticated($request,$user) 
    { 
     if(\Auth::user()->isAdmin()){ 
      return redirect()->intended('dashboard'); 
     } 

     return redirect()->intended('/home'); 
    } 
+0

Я не заметил, что пустая функция там, спасибо. – vfsoraki

+0

@vfsoraki - это свойство «AuthenticateUsers' и здесь ' return $ this-> authenticated ($ request, $ this-> guard() -> user()) ?: Redirect() -> предназначено ($ this- > redirectPath()); 'и что вы подразумеваете под пустой функцией? –

+0

Я имел в виду, что это реализовано как пустая функция, вот и все. Ничего важного :) – vfsoraki

1

В 5.3 можно переопределить sendLoginResponse() в LoginController для перенаправления пользователей на пользовательской странице после входа в систему:

return redirect('/'); 
+0

Это довольно очевидно. Я имел в виду, почему в документах упоминается то, чего не может быть достигнуто? – vfsoraki

+0

Документы новых версий Laravel часто просто копируются в старых версиях, но сама инфраструктура постоянно меняется. Свойство redirectTo не работает для меня с 5.2. –

+0

Какая жалость. Вы не можете полагаться на официальную документацию! – vfsoraki

0

Может быть, это поможет

protected $redirectTo = '/account'; 

    protected function redirectTo() 
    { 
     if (! empty(config('locales.locale_prefix'))) { 

      return $this->redirectTo = config('locales.locale_prefix') .'/account'; 
     } 

     return $this->redirectTo; 
    } 

А также изменить действие в виде

<form class="form-horizontal" role="form" method="POST" action="{{ url(config('locales.locale_prefix'), 'login') }}"> 
Смежные вопросы