2015-09-10 3 views
0

Я использую Laravel 5.1. У меня есть пользовательская функция выхода из системы в AuthController.php, то, что я добавил на нее, просто вычисляет общее время входа пользователя и просто обновляет определенную таблицу. Моя проблема в том, что когда я нажимаю logout, он просто перенаправляет меня на /home, теперь это происходит не всегда, но это довольно легко воспроизвести. Когда я нажал кнопку выхода из системы, он просто перенаправил на /home, затем снова щелкнул, то же самое. Иногда я брал у меня 4 афферма, чтобы щелкнуть кнопку выхода из системы, прежде чем он выйдет из системы и отправит меня на страницу входа. Что здесь происходит? Вот мой код:Laravel - Выход из системы перенаправления на главную, а не выход из системы

public function getLogout() 
{ 

    if (Auth::check()) 
    { 
     $userid = Auth::user()->id; 

     date_default_timezone_set('Asia/Taipei'); 

     $today = date('Y-m-d'); 
     $logHour = new LoginHour(); 
     $checkLogin = $logHour->checkLoginHoursOut(intval($userid), $today); 

     if($checkLogin != null) 
     { 
      $loginhours = ''; 
      $timestamp = date('Y-m-d h:i:s'); 
      $timestamp2 = strtotime($timestamp); 

      $userLastLogin = $checkLogin[0]->timestamp; 
      $userLastLogin2 = strtotime($userLastLogin); 

      // Get difference in hours 
      $diffHours = round(($timestamp2 - $userLastLogin2)/3600, 2); 


      LoginHour::where('date', '=', $today)-> 
         where('user_id', '=', $userid)-> 
         update(['loginhours' => $checkLogin[0]->loginhours + $diffHours, 'status' => 0, 'timestamp' => $timestamp]); 
     } 

     Auth::logout(); 

     return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/auth/login'); 

    } 
    else 
    { 
     return Redirect::to('/auth/login'); 
    } 
} 

Теперь вы можете заметить, у меня есть Auth::check() и мне нужно, что кузен по какой-то причине я не знаю, почему я получаю ошибку объекта неимущественной в $userid = Auth::user()->id; Но это нормально сейчас, проблема в том, Я перенаправлен на /home

Я также объявил protected $redirectAfterLogout = '/auth/login'; в верхней части моего контроллера.

+0

Можете ли вы попытаться удалить код, который не имеет никакого отношения к вашей проблеме? Это очень усугубило бы вопрос :-) – edi9999

+0

@ edi9999 Это моя вся функция выхода из системы. Причина, по которой я их ставил, заключается в том, чтобы другие узнали, что может быть неправильным в других частях. Я считаю, что я хорошо объяснил эту проблему, и код не так долго путается :) – jackhammer013

+0

Может быть, вы не вышли из системы успешно. Вы проверили http://laravel.io/forum/11-09-2014-cant-logout-with-authlogout? – jitendrapurohit

ответ

-1

Проблема с ручкой RedirectIfAuthenticated middleware. Он проверяет запрос и перенаправляет его на адрес {domain}/home. Просто удалите его и обработайте с помощью вашего контроллера.

1

Испытано в Laravel 5,3/5,4

Укажите URL-адрес он должен перенаправлять. В LoginController.

protected $redirectLogoutTo = '/login'; 

В LoginController переопределить метод выхода из свойства AuthenticatesUsers.

public function logout(Request $request) 
{ 
    $this->guard()->logout(); 

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

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

    return redirect($this->redirectLogoutTo); // only line that changes 
} 

Внутри этого метода вы можете делать и другие материалы по своему усмотрению.