2016-09-14 2 views
0

Я попытался установить сеанс, но столбец user_id всегда null. Другие столбцы работают отлично. Is user_id зарезервировано для чего угодно? Это случилось с кем-то? Здесь я пытаюсь проверить подлинность пользователя, сохранить данные в сеансе и перенаправить на панель мониторинга. Вот код:Таблица сеансов Laravel user_id всегда null

public function login(Request $request) 
{ 
    $validator = validator::make($request->all(),[ 
     'username' => 'required', 
     'password' => 'required' 
    ]); 

    if($validator->fails()){ 
     return redirect('/') 
     ->withInput() 
     ->withErrors($validator); 
    } 
    $username = $request->get('username'); 
    $user = User::where('username', $username)->first(); 
    $checkpass = false; 
    if(!empty($user)){ 
     $password = $request->get('password'); 
     $dbpass = $user->getAttributes()['pass']; 
     $checkpass = Hash::check($password, $dbpass); 
     if($checkpass){ 
      //saving session after success login check 
      $request->session()->put('id',\Session::getId()); 
      $request->session()->put('user_id', $user->id); 
      $request->session()->put('ip_address', $request->ip()); 
      $request->session()->put('user_agent', $request->header('User-Agent')); 
      $request->session()->put('payload', base64_encode($request->getContent())); 
      $request->session()->put('last_activity', time()); 
      //redirect to dashboard 
      return redirect('/dashboard'); 
     } 
    } 
    if(empty($user) || $checkpass == false){ 
     $errors = new MessageBag(['password'=>['Email and/or password invalid.']]); 
     return redirect('/') 
     ->withErrors($errors) 
     ->withInput(Input::except('password')); 
    } 



} 
+0

Можете ли вы показать остальную часть кода, начиная с где u получить значения – tam5

+0

@tam только $ request-> session() -> put ('user_id', 11); дает мне нуль, другие прекрасны. Это случилось с кем-то? – BulletProof47

+0

Это не то, что я спросил, это было ясно из вашего вопроса. Я попросил дополнительную информацию. Тем не менее, у меня есть догадка. Является ли 'user_id' еще« нулевым », когда вы делаете запрос в качестве аутентифицированного пользователя? – tam5

ответ

2

Вы используете драйвер database сессии. Таким образом, Laravel обрабатывает сеансы через Illuminate\Session\DatabaseSessionHandler.php. Если вы проверите исходный код, вы найдете метод getDefaultPayload, который вызывается всякий раз, когда вы используете write/save сеанс в базе данных.

В этом методе вы найдете это:

if ($container->bound(Guard::class)) { 
    $payload['user_id'] = $container->make(Guard::class)->id(); 
} 

, который устанавливает user_id на вошедшего в систему пользователя через Laravel-х Guard. Однако, поскольку вы не входите в систему с Guard, этот метод будет видеть текущий идентификатор пользователя как null, и именно поэтому вы всегда получаете null.

Кроме того, на самом деле ни одно из свойств, которые вы устанавливаете, фактически установлено. Вместо этого все они устанавливаются в методе getDefaultPayloadDatabaseSessionHandler.php.

Здесь вы должны начать поиск оптимального способа интеграции сеанса базы данных Laravel с вашей реализацией. Поскольку у меня нет более подробной информации о вашем приложении, я не могу дать вам дальнейшее руководство, как лучшее решение и что будет лучшим изменением. Не зная ничего, я мог бы изучить интеграцию вашей системы входа в систему с Laravel Guard, потому что она также предоставляет некоторые другие функции. Или более быстрым решением может быть просто изменить этот бит метода getDefaultPayload.

+0

Я обновил вопрос с помощью полного метода входа. Что было бы лучше для меня тогда? – BulletProof47

+1

@ BulletProof47 Я прочитал ваш код. Мне не кажется, почему вам нужно будет выбрать эту систему входа в систему по умолчанию, которая предоставляется Laravel. Моя рекомендация состояла бы в том, чтобы реорганизовать ваш код, чтобы использовать систему аутентификации laravel. Вы все равно сможете делать все, что вы делаете (из кода, который вы показывали), и это будет намного проще. Если вам нужна помощь с этим, дайте мне знать – tam5

+0

Итак, я не могу обновить сеанс user_id? Если нет, я, конечно, буду использовать default auth? Можете ли вы указать мне на любые хорошие учебные пособия. Спасибо – BulletProof47