2016-03-30 3 views
0

Я использую аутентификацию по умолчанию Laravel 5.2 и некоторые проблемы с поведением метода authenticated() структуры. Этот метод полезен для запуска кода после успешной проверки подлинности, но перед загрузкой последующих страниц. Успешная проверка подлинности будет вызывать метод проверки подлинности() в AuthController, который я определил следующим образом:Использование метода аутентификации Laravel 5.2

protected function authenticated() { 
     session(['loggedIn' => 'show']); 
     return redirect('/home'); 
} 

Как мы видим, это может быть полезно для установки переменных сеанса, которые необходимы при стартовой первой загрузке вверх (но который не следует сбрасывать при каждом перезагрузке домашней страницы).

В моем случае я использую loggedIn для отображения определенного приветственного div только один раз за сеанс после входа пользователя в систему или регистрации. Я включил следующий PHP на главной странице для этого:

function displayWelcome() { 
    if (session('loggedIn') == 'show') { 
     echo '<div class="container" name="loggedIn" id="loggedIn">'; 
     session(['loggedIn' => 'hide']); 
    } else { 
     echo '<div class="container" name="loggedIn" id="loggedIn" hidden>'; 
    } 
} 

В настоящее время этот код прекрасно работает, когда существующие пользователи войти

Это, однако, не в полной мере работать для регистрации пользователей.. Он успешно перенаправляется на главную страницу, но приветственный div никогда не появляется вообще. Как ни странно, когда я эхо-сеанс ('loggedIn') до, вызывающий функцию displayWelcome(), он выводит «скрыть» после регистрации (и правильно отображает «show» после входа в систему). Я не вижу, как он приобретает значение «скрыть» и почему он неправильно открывает div.

Любые подсказки?

ответ

1

Вы можете перезаписать метод register из RegistersUsers признака находится здесь:

\Illuminate\Foundation\Auth\RegistersUsers 

использовать метод ниже в контроллере Auth и вызвать ваш пользовательский код там:

/** 
    * Handle a registration request for the application. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function register(Request $request) 
    { 
     $validator = $this->validator($request->all()); 

     if ($validator->fails()) { 
      $this->throwValidationException(
       $request, $validator 
      ); 
     } 

     Auth::guard($this->getGuard())->login($this->create($request->all())); 

     return redirect($this->redirectPath()); 
    } 
+0

Спасибо. Это работает. Один последующий вопрос. У меня есть еще один код в authenticated(), который назначает другую переменную сеанса с именем shortName: $ id = \ Auth :: user() -> inst_id; $ instit = \ App \ Institution :: find ($ id); session (['shortName' => $ instit-> shortname]); Этот код отлично работает, не будучи помещенным в регистрационную функцию - он позволяет мне получить доступ к shortName на загруженной странице после регистрации. Вы знаете, почему я могу назначить переменную сеанса shortName в authenticated(), но не переменную сеанса loggedIn для регистрации? – Atlas

+0

@Atlas Не уверен, не глядя на код, попробуйте обернуть часть $ instit = \ App \ Institution :: find ($ id) в блок catch try с помощью \ App \ Institution :: findOrFail ($ id) и catch \ Illuminate \ Database \ Eloquent \ ModelNotFoundException –

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