【问题标题】:Laravel Passport tokensExpireIn seems not workingLaravel Passport tokensExpireIn 似乎不起作用
【发布时间】:2017-12-12 16:15:59
【问题描述】:

我正在使用 Larave 5.4 护照创建 SPA 应用程序。但是,我能够进行身份验证。但访问令牌始终是具有 600 秒过期时间的短命令牌。

我无法延长过期时间:

Passport::tokensExpireIn(Carbon::now()->addDays(15));

Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));

它根本没有效果。

有什么帮助吗?提前致谢。

【问题讨论】:

  • 我也有同样的问题。但是,我不想编辑供应商。任何其他解决方案表示赞赏。

标签: laravel access-token laravel-passport


【解决方案1】:

尝试使用这个库:https://github.com/GeneaLabs/laravel-caffeine,你可以查看 laravel session config options

【讨论】:

  • 这与访问令牌无关。我猜它是关于 csrf_token 的形式。还是谢谢你。
【解决方案2】:

我之前的申请也有同样的问题,我花了两天时间试图找出问题所在,我想出的最佳解决方案是直接在 PassportServiceProvider 中更改过期日期

转到 vendor/laravel/passport/src/PassportServiceProvider.php 第 108 行

new PersonalAccessGrant, new DateInterval('P1Y')

例如将过期日期设置为一周

new PersonalAccessGrant, new DateInterval('P1W')

我知道这是解决问题的不好解决方案,最近我在 Laravel Git repo 上发现了同样的问题

https://github.com/laravel/passport/issues/47

【讨论】:

  • 它工作正常。谢谢。这不是一个理想的解决方案,但它工作正常。
  • 成功了。谢谢。顺便说一句,不推荐在 \vendor 文件夹中编辑文件的解决方案。它将无法在产品或开发环境中工作。
  • 这是一个绝对无效的解决方案,因为每次部署和更新包时都会丢弃更改。它引入了不可预测的错误原因。请不要让这成为公认的答案,因为它可能会导致更多人在他们的代码库中实现它。
【解决方案3】:

用于护照授予令牌

    Passport::tokensExpireIn(Carbon::now()->addDays(10));
    Passport::refreshTokensExpireIn(Carbon::now()->addDays(15)); 

这只是增加了 10 分钟的到期时间。不知道如何以及为什么,而是更改内部代码。我变了

    Passport::tokensExpireIn(Carbon::now()->addDays(10000));
    Passport::refreshTokensExpireIn(Carbon::now()->addDays(12000));

现在它增加了 7 天的到期时间。好像 addDays 函数加了 10000 分钟。

【讨论】:

    【解决方案4】:

    个人访问令牌总是长期存在的。使用 tokensExpireIn 或 refreshTokensExpireIn 方法时,它们的生命周期不会被修改 - 如 Laravel 的官方文档 (https://laravel.com/docs/5.7/passport#personal-access-tokens) 中所述。

    在供应商目录中编辑PassportServiceProvider.php 的选项是个坏主意。每次,您在(e.g composer update/install) 或其他开发人员在生产中进行更新时,代码都会恢复到现状,并且会开始失败。

    更好的方法是使用密码授予令牌。 OAuth2 密码授权允许您的其他第一方客户端(例如移动应用程序)使用电子邮件地址/用户名和密码获取访问令牌。这使您可以安全地向您的第一方客户端颁发访问令牌,而无需您的用户完成整个 OAuth2 授权代码重定向流程。确保您已正确安装passport(参见指南:https://laravel.com/docs/5.7/passport#installation),然后运行此命令

    php artisan passport:client --password
    

    完成此操作后,您可以通过向/oauth/token 发出POST 请求来请求访问令牌。请记住,该路由已经被Passport::routes 方法注册,因此无需手动定义它。如果请求成功,您将在来自服务器的 JSON 响应中收到 access_token 和 refresh_token。请参阅下面的有效负载示例:

    {
        "grant_type" : "password",
        "client_id":"your-client-id",
        "client_secret":"your-client-secret",
        "username":"twady77@gmail.com",
        "password":"123456",
        "scope":""
    }
    

    示例响应:

    {
    "token_type":"Bearer",
    "expires_in":1296000,
    "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjVkMWJjN2NhOTU0ZWU2YTZmOGNkMGEyOTFjOTI5YzU4Zjk3ODk3M2YxZDJmNjQ2NjkyZjhjODQyZjYxNTBjZGRiYzMwY2RjMzRmZjJhYmU1In0.eyJhdWQiOiI4IiwianRpIjoiNWQxYmM3Y2E5NTRlZTZhNmY4Y2QwYTI5MWM5MjljNThmOTc4OTczZjFkMmY2NDY2OTJmOGM4NDJmNjE1MGNkZGJjMzBjZGMzNGZmMmFiZTUiLCJpYXQiOjE1NDkyOTI5MjcsIm5iZiI6MTU0OTI5MjkyNywiZXhwIjoxNTUwNTg4OTI3LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.cSvu30xAT-boA5zmVuxTr0TfH_5MYuVWYi6NVQRbryZSswt8EAFTi5QXHH1f0O63DWnLA6VFBS2AfDe4-ryJZACDnt4gtPJOeuu1rNMZ53MU1vjxnyC8FsYz8v9vmYJsZPKqfTJpuJFYRFh7kkV7uWAmrEkuF3POnDn-GjW50f4i26lIZW5ta5j4nZQrIJCQUEzwXaQtn9H-qef3bTWAaplWaV-k7Blic-0TXXVfWa_CdoKCAzHROVBRWY1Idhe1LJkvGKldUGzUfliiB1x7EVVInq94VYEP5d9__90Z2UMUn5dCEgWkXvcEHYy87_4OSwu4TQk_f3hD82OVOEtJGgPyJqK51WqnQCBYwNtxNjqAW2oaMgpritp3G8nccUiyhkE4Pd_kj3cb2OvSNRXdDS9z-RnJb1OXUkja-4Xe_JfIWUjlTnkss18xMg89hcU_3xtBwUXBWHgffzcbNoI1oOwUL6Whekduiy8csf665v0cnzkPXISmvyGhiMseIlBEN9m9uESaJqD_g7WzbsEs7meI0CAF3230UgrI1MdYSAJMW0mMPF9EScH31a_Qpde5O233Ty6-S4NAp323Wneqs_jpGSfw81CvoI1JeY0hZccRC-MBBsQ2Ox7AM36H5L3p-ybricmT3oCcHEqhufq-ygyfqk1RufJwwRblwYPyaJE",
    "refresh_token":"def50200c6b2378110190ac28d9d55f622885bb0b470a20543a6f1eefb18ed93c57b7040dc4db9444aa8853209bde9d5443a407d43fcaf1deb2e1f3f5ea3ce7431c4ec5e111bdc0cc71ca76034cd2a884441c51e4c922dddfa3f6e3a3fa8e1fbb8efe4581ce70d76590e732b3fa8b0c41a8abff4a8759f9dd1cc3ae46134fb67a8f25cd79e3229f6ee3238701ebfe0e8b0e2f14bd13c7fde3f813708a3de9928c8e992850994ca97bf61984cdb846bd0d72916312d9985472fc4293a3b3f2c55e1ef19621ef009623a6780f800ece9c8d835871dc795fda5daa43ac3fdae467e66b46e4eb73d53b8cb821522ee60979711c28c54fb2085f6000ac7e96e019ce51b9f92ea3fa2028aa0238fc3dca9c900e8dd77907782b22482f95a5e55708e5bda8c28f3732ff55e361f08447b33fe05d5646cecfb9faed462d327efdcc2a3742f46f9f825275d296b4ced25c05f3b6add68f43a2b448e4523d5410c631dc45bba"
    }
    

    【讨论】:

    • 从 laravel 5.8 开始,个人访问令牌的过期时间也可以使用personalAccessTokensExpireIn 设置见laravel 5.8 token life time,如果我们可以设置过期时间那为什么不使用呢?
    【解决方案5】:

    tokenExpireIn() 代替 refreshTokensExpireIn() 使用 then 解决 tokenExpireIn 问题。

    【讨论】:

      猜你喜欢
      • 2019-04-20
      • 2019-10-04
      • 2021-09-27
      • 2019-03-28
      • 2021-07-19
      • 2020-04-05
      • 2021-07-15
      • 2018-02-04
      • 2021-09-15
      相关资源
      最近更新 更多