我需要知道哪个更好?使用 session 或 auth()->user()->property
Posted
技术标签:
【中文标题】我需要知道哪个更好?使用 session 或 auth()->user()->property【英文标题】:I need to know which is better ? to use session or auth()->user()->property 【发布时间】:2020-01-15 17:05:38 【问题描述】:我在一个社交网站上工作,当我登录时,我需要一些关于用户的信息以便在前端使用,例如姓名、图片链接、用户名、ID。
所以哪个更好用,一个会话来存储我需要的所有数据,或者只是使用 auth()->user()->属性?
【问题讨论】:
【参考方案1】:默认情况下,auth()
辅助函数或外观已经将会话用作 Web Guard 的驱动程序...config/auth.php
'guards' => [
'web' => [
'driver' => 'session', // <-- Here
'provider' => 'users',
],
]
所以你真正要问的是会话或会话是否更好......
【讨论】:
【参考方案2】:你可以使用 auth() 助手:
auth()->user()
或认证门面:
Auth::user()
两者相同,并从数据库中获取身份验证用户详细信息
【讨论】:
所以最好使用 session ?? 我知道这两种方式都有效,但我想使用最高效的方式 是的,我认为这是获取 jwt 和 session 的身份验证数据的唯一方法,如果你有多个身份验证用户,你应该像这样传递当前的守卫:auth('your-guard-name') 经过身份验证的用户是从会话而不是数据库中检索的(除非您为会话使用数据库驱动程序),但仍然来自会话表而不是用户表 那么为什么当更新经过身份验证的用户的全名然后使用 auth()->user()->full_name 我们得到新的更新全名@CaddyDZ?【参考方案3】:您可以为此使用 auth 助手,它足够优化,因为它在 laravel 内核加载开始时加载在全局引导的 $app 变量中。
这也是在 auth() 帮助程序(如 auth()->id)中从用户加载其他每次需要的属性的好方法。
您可以通过这种方式使用 marco 将此类数据添加到 auth helper:
将此添加到 AppServiceProvider 启动方法或任何自定义提供程序,您必须通过 SessionGuard 向身份验证助手添加额外字段,该字段是可宏的:
SessionGuard::macro('mobile', function ()
return auth()->check() ? auth()->user()->mobile : null;
);
现在在任何你需要的地方都可以使用
auth()->mobile();
【讨论】:
非常感谢,这个 marco 方法将在我的项目中帮助我更多以上是关于我需要知道哪个更好?使用 session 或 auth()->user()->property的主要内容,如果未能解决你的问题,请参考以下文章
使用 Exists 或 Select 将此值设置为位变量哪个更好?
哪个更好?将结果存储在 Session 中还是重新查询数据库?