2017-02-21 100 views
0

使用Laravel進行發票應用程序開發。我在settings表中存儲每個用戶的日期和金額格式。如何在用戶在Laravel登錄時設置會話變量

當用戶登錄到他們的賬戶時如何設置Session變量?請給出任何建議。我正在使用Laravel 5.3。

+0

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

回答

0

您可以使用兩種不同的方法(使用Request實例或使用提供的全局幫助程序/函數)將數據存儲在會話中。

Request實例

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

全球助手

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

這可以工作,但會話不是持久的,例如用戶關閉瀏覽器並重新打開我必須使用中間件的頁面,例如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, –

相關問題