【问题标题】:One unnecessary select statement in TokenGuardTokenGuard 中一个不必要的 select 语句
【发布时间】:2017-08-26 05:10:22
【问题描述】:

我在 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

当我打印在获取用户详细信息时发出的选择语句时...我看到下面有两个选择语句。

[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 在哪里使用第一个 select 语句?

【问题讨论】:

    标签: laravel-5 laravel-5.4


    【解决方案1】:

    第二条语句确实是在你调用 ->user() 之后在从 Auth::guard() 返回的守卫上运行的,在守卫包含的 UserProvider 实现中。

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 2021-12-10
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多