登录后在会话中存储变量
Posted
技术标签:
【中文标题】登录后在会话中存储变量【英文标题】:Store variable in session after login 【发布时间】:2016-10-07 09:03:07 【问题描述】:我是 Laravel 框架的新手,我需要你们的帮助,伙计们!
我现在正在尝试的是在登录后立即在会话中添加一个新变量。 此变量取决于当时登录的用户。 我现在拥有的是这个,它有效,但不是我真正想要的:
$loggedUserId = Auth::id();
$getTenantId = DB::table('users')->select('tenant_id')->where('id', $loggedUserId)->get();
$tenantId = $getTenantId[0]->tenant_id;
Session::put('tenant_id', $tenantId);
问题是这段代码存在于 home.blade.php 中,我不希望这样,因为如果,比方说,我想创建一个系统,当用户注销并再次登录时,会出现之后出现的页面login 是注销前最后访问的页面。
我应该把这段代码放在哪里,以便每次用户登录后都会执行?
【问题讨论】:
您必须从您的home.blade.php
中删除此代码。查询和会话交互应该“存在”在您的视图之外。
是的,我知道。但是我应该把这段代码放在哪里登录后立即执行?我想将该tenant_id 存储在会话中,但它基于登录的用户。我试图将它放在 loginController 中,但它说 Auth::id() 不存在。
【参考方案1】:
要在用户通过身份验证后立即执行操作,您可以使用 Laravel 的事件。这是确切解释如何订阅您所关注的事件的文档:https://laravel.com/docs/5.3/events#event-subscribers
【讨论】:
这看起来很有趣。我会仔细看看的。谢谢!【参考方案2】:Create middleware 并将代码放在那里。然后将中间件添加到web
列表(app\Http\Kernel.php
)或add middleware to a route group。此外,您可以只用一行代码执行相同的操作:
session()->put('tenant_id', auth()->user()->tenant_id);
最后,在您的情况下,您甚至不需要做所有这些事情,因为 auth()->user()->tenant_id
和 Auth::user()->tenant_id
对所有登录用户都是全局可用的(在所有控制器、视图、模型等中)。
【讨论】:
第二件事对我来说效果很好。我也尝试过使用中间件,但我认为我搞砸了一些东西并且它没有用。谢谢!以上是关于登录后在会话中存储变量的主要内容,如果未能解决你的问题,请参考以下文章