2015-07-10 4 views
1

Я хочу изменить перенаправления после входа/выхода из системы.L5: Изменение перенаправления после входа в систему

В моих Auth/AuthController я определил

protected $redirectAfterLogout = '/'; 
protected $redirectTo = '/'; 

маршрута выхода из системы хорошо: корень, но Логин rectirection еще /home ....

И использование protected $redirectPath ='/' не решает проблемы моей

+0

Try 'redirectPath' вместо' redirectTo', я сомневаюсь, что он будет делать что-нибудь, но 'RedirectsUsers' [черта] (https://github.com/laravel/framework/blob/5.1/src /Illuminate/Foundation/Auth/RedirectsUsers.php), похоже, предпочитает это над 'redirectTo'. Но да, первое, что он сделает, это попытаться перенаправить вас к месту, которое вы изначально собирались уйти, поэтому, если вы отправились в '/ home' и перенаправили на страницу входа в систему, он перенаправит вас на родину после login по умолчанию, см. [здесь] (https://github.com/laravel/framework/blob/5.1/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php#L86). – alexrussell

+0

У меня нет/home route, и я удалил HomeController :) И, как я писал, я попробовал 2 свойства, и никто не работает – Lolo

ответ

1

В RedirectIfAuthenticated

public function handle($request, Closure $next) { 

    if ($this->auth->check()) 
    { 
     return new RedirectResponse(url('/')); 
    } 

    return $next($request); 
} 
0

В AuthController, добавив 2 функции getLogout и postLogin, которые будут обрабатывать login/logout запросов. После этого Ларавель справится с магией.

public function postLogin(Request $req){ 
    //Validate input 
    $this->validate($req,[ 
     'email' => 'required', 'password' => 'required' 
    ]); 

    $credentials = $req->only('email','password'); 

    if($this->auth->attempt($credentials,$req->has('remember'))){ 
     return redirect('articles'); 
    } 
    return redirect('auth/login') 
       ->withInput($req->only('email')) 
       ->withErrors([ 
        'email' => 'Something wrong' 
       ]); 
} 

public function getLogout(){ 
    $this->auth->logout(); 
    return redirect('articles'); 
} 
+0

Я пытался и даже выполнил 'return redirect ('/');' Я иду в '/home' – Lolo

1

в RedirectIfAuthenticated промежуточного слоя попробуйте установить переадресацию путь в следующей функции,

public function handle($request, Closure $next) 
{ 
    if ($this->auth->check()) 
    { 
     return new RedirectResponse(url('/home')); 
    } 

    return $next($request); 
} 

Это в основном проверяет user регистрируется в перенаправлении на home

+0

Я изменил метод handle() 'return redirect (route ('/'));' и теперь у меня есть ошибка Route [/] not defined.' ..... В routes.php у меня есть Route :: get ('/', 'WelcomeController @ index'); '' – Lolo

+0

'route()' относится к именованному маршруту. То есть 'Route :: получить ('/', [ 'а' => 'домашнюю страницу', 'использует' => 'SomeController @ дом']);' с 'маршрут ('главная страница');' должно сработать. Вы можете просто использовать 'url ('/')', если вы не хотите указывать маршрут. –

+0

@Lolo см. Комментарий Бена выше. –

0

По умолчанию обработчик почтового ящика по умолчанию перенаправляет URL-адрес, который пользователь намеревался посетить, прежде чем перенаправляться на страницу входа.

Если Laravel не может найти требуемое URL она проходит на выходе redirectPath() из AuthenticatesAndRegistersUsers черты, ниже:

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

    return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home'; 
} 

Как вы ГЭЭ, он ищет свойства redirectPath и redirectTo. Я не уверен, почему есть оба; возможно, для БК с более старой версией.

Установка любого из этих свойств в вашем контроллере должна быть достаточной. Тем не менее, вы также можете перезаписать этот метод в своем контроллере, если хотите реализовать его по-другому.

Следует отметить, что этот метод вызывается только в том случае, если Laravel не может найти предполагаемый URL-адрес. Если, например, вы посещаете /home и перенаправлены на страницу входа, /home - ваш целевой URL, и поэтому вы будете перенаправлены туда.

Единственный способ заставить это либо заменить реализацию postController, переписав метод в вашем контроллере, либо, возможно, сначала установить переменную сеанса url.intended.

// Obviously add namespaces and use statements 

class AuthController extends Controller { 
    use AuthenticatesAndRegistersUsers { 
     postLogin as traitPostLogin; 
    } 

    protected $redirectTo = 'some-page'; 

    function postLogin(Request $request) { 
     session('url.intended', $this->redirectTo); 

     return $this->traitPostLogin($request); 
    } 
} 
+0

Ещё не работаю ..... все еще пытаюсь добраться/домой. Я могу объяснить, почему он работает для метода выхода, но не для входа? – Lolo

+0

У вас есть '/' настроен как гостевой маршрут? Если вы это сделаете, то промежуточное программное обеспечение RedirectIfAuthenticated будет загружаться и, как и розовое vansia и 2318, ссылаясь на '/ home', которое может быть изменено в этом промежуточном программном обеспечении в вашем каталоге' app'. – alexrussell

+0

конечно !! Маршрут WORKS для выхода из системы, затем должен работать для входа в систему – Lolo

Смежные вопросы