我在Laravel 5.4
中通过JQuery使用TokenGuard处理所有与数据库相关的请求用户登录后...我正在使用以下方法获取用户个人资料。
public function ViewProfile() {
$user = \Auth::guard("api")->user();
$Data = [
"FirstName" => $user->FirstName,
"LastName" => $user->LastName
];
return \Response::json([
'Status' => true,
'Data' => $Data,
], 200);
}
以下是POST方法Url被发送到服务器以使用上述方法获取数据
http://localhost:1234/public/api/v1/apiviewprofile?api_token=598bbba095bdd1598bbba095bf1
当我打印在获取用户详细信息时发出的select语句时......我看到下面有两个选择语句。
[2017-08-10 02:37:05] local.INFO: select * from `tbluser` where `UserID` = ? limit 1
[2017-08-10 02:37:05] local.INFO: select * from `tbluser` where `api_token` = ? limit 1
问题
我可以理解当我使用TokenGuard发送POST请求时...它首先验证令牌....这样它就到了数据库。所以第二个选择语句没问题。但是,Laravel 5.4在哪里使用第一个选择语句?
答案 0 :(得分:0)
第二个陈述确实是在你从->user()
的守卫的UserProvider实施中回复Auth::guard()
后卫后发出的。{/ p>
不太可能从您提供的代码触发第一个语句。我怀疑它与使用ViewProfile()
操作在路线上的某些中间件有关。
在您成功验证用户身份之后,甚至可能在重定向到该路由之前执行查询? (第一个查询正是用户身份验证查询)。
重定向可以在几分之一秒内完成,由于日志以1秒精度显示时间,因此无法确定两者之间的确切时间。除非您确定根本没有重定向,否则很难判断这两个查询是否在同一个Laravel容器生命周期内执行。