TokenGuard中一个不必要的select语句

时间:2017-08-10 02:41:29

标签: laravel-5 laravel-5.4

我在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在哪里使用第一个选择语句?

1 个答案:

答案 0 :(得分:0)

第二个陈述确实是在你从->user()的守卫的UserProvider实施中回复Auth::guard()后卫后发出的。{/ p>

不太可能从您提供的代码触发第一个语句。我怀疑它与使用ViewProfile()操作在路线上的某些中间件有关。

在您成功验证用户身份之后,甚至可能在重定向到该路由之前执行查询? (第一个查询正是用户身份验证查询)。

重定向可以在几分之一秒内完成,由于日志以1秒精度显示时间,因此无法确定两者之间的确切时间。除非您确定根本没有重定向,否则很难判断这两个查询是否在同一个Laravel容器生命周期内执行。