我需要知道哪个更好?使用 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的主要内容,如果未能解决你的问题,请参考以下文章

使用数组或 List<> 哪个更好? [复制]

get() 还是 merge() 哪个更快?

使用 Exists 或 Select 将此值设置为位变量哪个更好?

哪个更好?将结果存储在 Session 中还是重新查询数据库?

PHP:strftime()、date() 或 DateTime,哪个更好?

在主键的情况下哪个更好 bigint 或 nvarchar