使用Laravel进行发票应用程序开发。我在settings
表中为每个用户存储日期和金额格式。
当用户登录其帐户时如何设置Session
变量?请提出任何建议。我使用的是Laravel 5.3。
答案 0 :(得分:10)
当然,文档告诉我们如何store session data *,但他们没有解决OP关于在登录时存储会话数据的问题。您有几个选项,但我认为最明确的方法是覆盖AuthenticatesUsers特征的经过身份验证的方法。
将覆盖添加到LoginController:
protected function setUserSession($user)
{
session(
[
'last_invoiced_at' => $user->settings->last_invoiced_at,
'total_amount_due' => $user->settings->total_amount_due
]
);
}
然后您可以将会话设置为:
<?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
]
);
}
}
如果你想要更聪明一点,你可以为Login或Authenticated事件创建一个监听器,并在其中一个events *触发时设置会话。
创建一个侦听器,例如SetUpUserSession:
{{1}}
*链接转到5.4,但这并没有从5.3更改。
答案 1 :(得分:2)
我已经使用Auth类管理用户数据,如下所示:
public function index(){
$user_id = Auth::user()->id;
}
但是您必须添加“使用身份验证;”在类声明之前。然后,您可以将任何数据添加到会话变量。
答案 2 :(得分:1)
当对应用程序进行新的登录时,Laravel会触发事件。 事件触发时,您可以为其添加一个侦听器,然后添加一个session。 这是我制作的侦听器的内容。
<?php
namespace App\Listeners\Auth;
use Illuminate\Auth\Events\Login;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
class UserLoggedIn
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
public function handle(Login $event)
{
if ($event->user->hasRole('subsidiary_admin')) {
\Session::put('subsidiary_admin', $event->user->subsidiaryBoUser->subsidiary_id);
\Session::put('subsidiary', $event->user->subsidiaryBoUser->subsidiary);
}
}
}
我就这样在eventServiceProvider
上注册了
'Illuminate\Auth\Events\Login' => [
'App\Listeners\Auth\UserLoggedIn',
],
答案 3 :(得分:0)
这是我在做什么:
我的帮助文件中有这个:
\App\Helpers\helpers.php:
function signedUser()
{
return [
'id' => Auth::id(),
'group_id' => Auth::user()->group_id,
'group_name' => Auth::user()->group->name,
'avatar' => Auth::user()->avatar,
'first_name' => Auth::user()->first_name,
'full_name' => Auth::user()->full_name,
];
}
关于我的用户模型:
public function group()
{
return $this->belongsTo('App\Models\Group');
}
public function getFullNameAttribute()
{
$full_name = ucfirst($this->first_name) . ' ' . ucfirst($this->middle_name[0]) . '. ' . ucfirst($this->last_name);
return $full_name;
}
然后我可以像这样访问控制器和刀片文件上的变量:
dump(signedUser()['full_name']);
{{ signedUser()['full_name'] }}
答案 4 :(得分:-1)
您可以使用两种不同的方法将数据存储在会话中,方法是Request实例或使用提供的全局帮助程序/函数。
请求实例
public function methodA(Request $request) {
$request->session()->put('KEY', 'VALUE');
}
全球助手
public function methodB() {
session(['key' => 'value']);
}
您可以在documentation中找到有关这两种方法的更多详细信息。