【问题标题】:Why laravel creates token on each request?为什么 laravel 在每个请求上都创建令牌?
【发布时间】:2023-04-10 16:13:02
【问题描述】:

我有以下使用 Laravel Passport 的代码:

if(Auth::attempt($input, true)) {
    return \Auth::user()->createToken(Auth::user()->name, []);
}

因此,当用户每次登录时,Laravel 都会一遍又一遍地创建令牌。如果这种情况继续发生,那么数据库肯定会过载。也许我还没有理解 API Auth 的工作原理。

有没有办法阻止 Laravel 这样做,或者这是预期的结果?

【问题讨论】:

  • 您可以做的是在用户logout() 时删除令牌,这样就不会为用户创建多个条目。
  • @Exterminator 好主意!
  • 但是它有一个漏洞,你不能在多个系统上保持会话,所以如果你想在一个系统上保持会话,你可以这样做。

标签: php laravel api authentication token


【解决方案1】:

与在常规 Web 应用程序上下文中(您的会话保留(登录)状态)不同,(RESTful)API 通常被认为是无状态的。这意味着请求不必依赖于之前发生的请求。请求所需的一切,包括身份验证和授权,都应在每个单独的请求中处理。

更多详情见Cassio Mazzochi Molinexplanation of stateless Restful applications

亲切的问候,

德拉科

【讨论】:

  • 感谢您的资源。我正在使用 Authorization Bearer 来处理身份验证!
【解决方案2】:

与网站交互的传统过程是您从登录页面登录。接下来,您执行所需的操作,然后注销。但是,在 REST API 的情况下,该过程是完全不同的。传统的过程不适用于 RESTful API,因为登录页面上使用的方法没有任何意义。您需要改用 api_token。

您需要做的就是在发出请求之前将 api_token 附加到查询字符串中,并且请求已通过身份验证。

现在 Laravel 5.5 提供的东西非常有趣!您可以使用Passport library 轻松实现这个想法。

【讨论】:

    猜你喜欢
    • 2020-07-26
    • 2018-01-28
    • 2014-03-05
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2014-09-13
    • 2014-10-19
    • 2018-09-20
    相关资源
    最近更新 更多