2017-02-21 26 views
0

Разработка приложений-счетчиков продолжается с использованием Laravel. Я храню формат даты и количества для каждого пользователя в таблице settings.Как установить переменную сеанса при входе пользователя в Laravel

Когда пользователь вводит в учетную запись, как установить Session переменную? Пожалуйста, дайте любые предложения. Я использую Laravel 5.3.

+0

https://laravel.com/docs/5.3/session#storing-data –

ответ

0

Вы можете хранить данные в сеансе, используя два разных метода либо экземпляр запроса, либо используя предоставленную глобальную вспомогательную/функцию.

Запрос Instance

public function methodA(Request $request) { 
    $request->session()->put('KEY', 'VALUE'); 
} 

Global Helper

public function methodB() { 
    session(['key' => 'value']); 
} 

Вы можете найти более подробную информацию о обоих методах в documentation.

6

Конечно, документы сообщают нам, как store session data *, но они не затрагивают вопрос OP относительно хранения данных сеанса при входе в систему. У вас есть несколько вариантов, но я думаю, что самый лучший способ - переопределить аутентифицированный метод аутентификации AuthenticatesUsers.

Добавить переопределение в свой LoginController:

/** 
* The user has been authenticated. 
* 
* @param \Illuminate\Http\Request $request 
* @param mixed $user 
* @return mixed 
*/ 
protected function authenticated(Request $request, $user) 
{ 
    $this->setUserSession($user); 
} 

Затем вы можете установить сеанс в качестве:

protected function setUserSession($user) 
{ 
    session(
     [ 
      'last_invoiced_at' => $user->settings->last_invoiced_at, 
      'total_amount_due' => $user->settings->total_amount_due 
     ] 
    ); 
} 

Если вы хотите, чтобы быть немного более умным вы можете создать перехватчик для Вход или Аутентифицированные события и настройка сеанса при срабатывании одного из этих events *.

Создание слушателя, таких как SetUpUserSession:

<?php 

namespace app\Listeners; 

use Illuminate\Auth\Events\Login; 

class SetUserSession 
{ 
    /** 
    * @param Login $event 
    * @return void 
    */ 
    public function handle(Login $event) 
    { 
     session(
      [ 
       'last_invoiced_at' => $event->user->settings->last_invoiced_at, 
       'total_amount_due' => $event->user->settings->total_amount_due 
      ] 
     ); 
    } 
} 

* Ссылки идут на 5.4, но это не изменилось с 5.3.

+0

Идеальный ответ. Это сработало для меня. Теперь я могу правильно установить информацию профиля пользователя. –

+0

Это работает, но сеанс не был постоянным, например, пользователь закрывает браузер и снова открывает страницу, которую мне пришлось использовать Middleware, например, этот пример https://mydnic.be/post/laravel -5-and-his-fcking-non-persistent-app-setlocale –

+0

@JoelDavey app/config/session.php 'lifetime' => 43200, // 30 дней 'expire_on_close' => false, –