从会话中获取用户 ID - laravel 5.3 身份验证

问题描述 投票:0回答:2

我有新的 Laravel 5.3 安装。只需使用

php artisan make:auth
即可开始使用内置的身份验证功能。一切正常,登录后
Auth::check()
返回 true,
Auth::user()
返回用户的数据,
Auth::id()
给出登录用户的 ID。

令我困扰的是,当我只有这一行时

$userId = Auth:id();

在调试器面板的“查询”选项卡中我的控制器操作(并且其他地方没有与身份验证相关的其他代码)中,我看到以下查询

select * from `users` where `users`.`id` = '34' limit 1

这个额外的查询对我来说是非常不受欢迎的(尤其是全选部分),因为我需要用户的 id 来进行查询,从用户表中选择特定字段,以及将其与另一个表连接。出于性能原因,我不想进行双重查询。

那么,有没有办法告诉 Laravel 将登录用户的 id 保存在会话中(如果没有保存)并直接从会话中获取登录用户的 id - 而不对数据库进行任何查询。

编辑:我知道在第一次

Auth::user()
调用之后,后续调用不会向数据库发出请求,但是这是没有意义的,如果我只需要数据库中的某些列,为什么要进行
select *
查询。至少有办法告诉 Laravel 仅选择特定列,而不是
select *

谢谢

laravel authentication laravel-5 laravel-5.3
2个回答
0
投票

非常古老的主题,但这是我在不调用数据库的情况下检索登录用户 ID 的解决方案:

request()->session()->get(Auth::getName())

Auth::getName() 返回身份验证会话值,该值是会话对象中用户 ID 的键。


-1
投票

您不需要执行另一个查询。使用这个对象来获取其他属性:

auth()->user()->name
© www.soinside.com 2019 - 2024. All rights reserved.