【问题标题】:Replicating claims as headers is deprecated and will removed from v4.0 - Laravel Passport Problem in lcobucci/jwt package不推荐将声明复制为标头,并将从 v4.0 中删除 - lcobucci/jwt 包中的 Laravel 护照问题
【发布时间】:2021-03-08 05:03:50
【问题描述】:

我在我的 laravel 项目中使用 laravel/passport:7.5.1 包,最近遇到了这个异常。任何想法?我临时将lcobucci/jwt:3.4.0 包降级为lcobucci/jwt:3.3.3

Replicating claims as headers is deprecated and will removed from v4.0. Please manually set the header if you need it replicated.

堆栈跟踪:

"exception": {
  "trace": [
    "/var/www/app/vendor/lcobucci/jwt/src/Builder.php:334",
    "/var/www/app/vendor/lcobucci/jwt/src/Builder.php:185",
    "/var/www/app/vendor/lcobucci/jwt/src/Builder.php:201",
    "/var/www/app/vendor/league/oauth2-server/src/Entities/Traits/AccessTokenTrait.php:34",
    "/var/www/app/vendor/league/oauth2-server/src/ResponseTypes/BearerTokenResponse.php:28",
    "/var/www/app/vendor/league/oauth2-server/src/AuthorizationServer.php:202",
    "/var/www/app/vendor/laravel/passport/src/PersonalAccessTokenFactory.php:114",
    "/var/www/app/vendor/laravel/passport/src/PersonalAccessTokenFactory.php:71",
    "/var/www/app/vendor/laravel/passport/src/HasApiTokens.php:67",
    "/var/www/app/app/Http/Controllers/Auth/Shop/GetTokenController.php:84",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:219",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:176",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:680",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php:58",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:104",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:682",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:657",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:623",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:612",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:176",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30",
    "/var/www/app/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php:65",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53",
    "/var/www/app/vendor/app/dms-pubsub/src/Middlewares/CaptureCorrelationIdMiddleware.php:40",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53",
    "/var/www/app/app/Http/Middleware/TrimData.php:31",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53",
    "/var/www/app/vendor/fideloper/proxy/src/TrustProxies.php:57",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:62",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:104",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:151",
    "/var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:116",
    "/var/www/app/public/index.php:55"
  ],
  "class": "ErrorException",
  "file": "/var/www/app/vendor/lcobucci/jwt/src/Builder.php:334",
  "message": "Replicating claims as headers is deprecated and will removed from v4.0. Please manually set the header if you need it replicated.",
  "code": 0
}

【问题讨论】:

  • 升级到护照 v9 解决了我的问题

标签: php laravel laravel-passport thephpleague


【解决方案1】:

我知道人们喜欢复制和粘贴答案。我通过在boot 方法中将此代码添加到app/Providers/AppServiceProvider.php 来解决此问题

if (config('app.debug')) {
    error_reporting(E_ALL & ~E_USER_DEPRECATED);
} else {
    error_reporting(0);
}

这是作者建议的。请参阅@Luís Cobucci 的回答。或者看这里:https://github.com/lcobucci/jwt/issues/550#issuecomment-733557709

如果您使用@Ahmed Nasser 方法要求旧版本,那么您将来可能会遇到问题。

【讨论】:

  • 是的,这行得通。我更喜欢这个而不是更新 jwt 包
  • 像魅力一样工作。你能解释一下你的答案吗?我喜欢复制和粘贴,但我也喜欢了解我粘贴的内容:p。
  • 基本上是在抑制异常。错误本身并不是真正的问题,因为它只是报告了一个已弃用的功能。所以我们只是压制弃用消息。
  • 成功了,谢谢!
【解决方案2】:

这个问题让我知道laravel/passport 使用thephpleague/oauth2-serverthephpleague/oauth2-server 使用lcobucci/jwt "3.3.3"。

composer require lcobucci/jwt=3.3.3

如果我今天在我的应用上运行 composer update 后一切正常,我就不会费心检查这个了。

【讨论】:

  • 这修复了它,应该是公认的答案。
  • 这解决了问题!
  • @WasifKhalil - 这个答案可能更有用,但其他答案首先是图书馆的作者。
  • 这个答案真的很有帮助
  • 伙计们,安装它。有用 。对我来说,它适用于 laravel 5.7 和 laravel/passport 版本 7.5.1
【解决方案3】:

对于造成混乱或问题,我深表歉意。请查看https://github.com/lcobucci/jwt/issues/550#issuecomment-733557709,了解我对为什么采用这种方法以及为什么它在我的 PoV 中不被视为 BC 中断的完整解释。

【讨论】:

  • 很抱歉,您因此更改而受到关注,感谢您在互联网上寻找它并提供交叉引用。我确实了解您来自哪里,并且我有点同意,但是,无论是针对谁,重大更改都是一项重大更改……这确实应该保留 4.0 的弃用和 5.0 中的删除-更恰当地遵循语言约定(至少是意图,如果不是实现)
  • 大多数用户不能接受更改错误报告级别,因为在 90% 的情况下 PHP 无权这样做。除此之外,如果您在全局范围内设置它,它可能会对应用程序的其他部分产生影响。使用“@”符号抑制代码行中的错误是一种代码异味。
猜你喜欢
  • 2021-03-08
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
相关资源
最近更新 更多