【问题标题】:Jwt Authentication error Argument 3 passed to Lcobucci\JWT\Signer\Hmac::doVerify()Jwt 身份验证错误参数 3 传递给 Lcobucci\JWT\Signer\Hmac::doVerify()
【发布时间】:2019-04-22 02:04:50
【问题描述】:

我正在做一个学习 laravel 的项目,我在其中看到了一些使用 jwt auth 的教程。它工作得很好,但现在并不总是显示错误,但我不知道为什么。就是这样:

传递给 Lcobucci\JWT\Signer\Hmac::doVerify() 的参数 3 必须是 Lcobucci\JWT\Signer\Key 的实例,给定 null,在 C:\xampp\htdocs\inmobiliaria\vendor\lcobucci\ 中调用jwt\src\Signer\BaseSigner.php 在第 42 行

有时它有效,但另一种无效。所以我不知道我能做什么。我试过了

  1. php artisan 缓存:清除
  2. php 工匠配置:清除
  3. php 工匠 jwt:secret

但问题仍然存在,有时我从服务器(200)得到很好的答案,但大部分都不好(500)。

截图

【问题讨论】:

  • 你能在你做身份验证的地方显示代码吗?
  • 身份验证不是问题。当我尝试制作 class::all(); 时出现此错误php 中的方法: public function all() { $properties = Property::with('images')->get(); return response()->json(['properties' => $properties], 200); }
  • 嗨@Esteban,我有同样的问题,你找到解决方案了吗?
  • 嗨@MaxM。其实不,我没有,还在寻找!
  • 我也有同样的问题。类型错误:传递给 Lcobucci\JWT\Signer\Hmac::doVerify() 的参数 3 必须是 Lcobucci\JWT\Signer\Key 的实例,给定 null,在 \vendor\lcobucci\jwt\src\Signer\BaseSigner 中调用。第 42 行的 php 当我进行许多查询时出现(有时它可以使用类似的参数)

标签: php laravel authentication jwt


【解决方案1】:

我的Laravel 8.xPHP 7.4 遇到了这个问题,所以我通过使用这些命令更新我的密钥解决了这个问题:

php artisan key:generate
php artisan jwt:secret

【讨论】:

    【解决方案2】:

    这个错误可能发生在

    • JWT_SECRET 缺少 .env
    • JWT_SECRET.env 中被评论
    • JWT_SECRET 的值有误。

    在我的例子中,运行php artisan jwt:secret 它是在当前JWT_SECRET 上附加密钥。所以检查我的.env 文件,JWT_SECRET 的值很长而且错误(应该是 64 个字符长)。

    解决它:

    1. 打开.env 并删除JWT_SECRET 值(请注意,您必须删除它而不是评论它)。
    2. 运行php artisan jwt:secret
    3. 运行php artisan cache:clear && php artisan config:clear

    【讨论】:

      【解决方案3】:

      如果你没有记得将 JWT_SECRET 添加到 Vapor 使用的 env 文件中,使用 Laravel Vapor 服务时也会发生这种情况。

      在这种情况下,只需为当前环境拉下.env 文件(在这种情况下为staging):

      vapor env:pull staging

      并添加JWT_SECRECT 行,然后推送:

      vapor env:push staging

      然后重新部署。

      【讨论】:

        【解决方案4】:

        我正在开发 App 平台 - Digital Ocean php artisan jwt:secret 为我做这件事 -> 它只是产生了一个新的秘密,这就是问题所在(只需检查你的 .env 文件)

        【讨论】:

          【解决方案5】:
          php artisan jwt:secret
          php artisan config:cache
          

          这两个命令就够了

          【讨论】:

            【解决方案6】:

            我在 Hostinger - Shared Hosting 上解决了同样的问题,但与其他人解释的方式略有不同。在共享主机上,用户将无法访问 shell/cmd/ssh 访问服务器 - 所以我已经使用 composer 执行了命令 - 感谢 Ángel Carlos del Pozo Muela 在https://stackoverflow.com/a/48682668 中分享了一个不同的解决方案的想法,但它有效在我的情况下也是如此

            我已经用额外的值更新了 composer.json >> 脚本标签

            "scripts": {
                "pre-generate-key": [
                    "@php artisan key:generate",
                     "@php artisan cache:clear",
                    "@php artisan config:clear"
                ],"post-autoload-dump": [
                    "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
                    "@php artisan package:discover --ansi"
                ]
            

            随后我使用转到托管文件管理器在 .env 文件中创建了一个新参数并部署了更改。

             JWT_SECRET={{value}}
            

            成功完成部署 - 测试所有服务 -> 所有服务开始正常工作 - 然后我从 composer.json 中删除“pre-generate-key”位并重新部署代码

            【讨论】:

              【解决方案7】:

              我在测试后部署应用程序时遇到了这个错误,其他一切都在本地服务器上运行良好。

              我注意到以下内容;

              • 当您在实施 JWT 之前上传应用程序并通过 Cpanel 上传直接重新上传而不重新上传 .env 文件时,您可能会收到此错误。

                • 如果是这种情况,解决此问题的最简单方法是我只需在 .env 文件(在底部)中添加 JWT:key ef

              JWT_SECRET=roCZauuldMpw5i4039393939393372y98bEWumqd9ls7Uk8DEpr0gIZ6WIWB

              希望这会有所帮助:)

              【讨论】:

                【解决方案8】:

                这里是完整的sn-p

                php artisan key:generate
                php artisan jwt:secret
                php artisan cache:clear
                php artisan config:clear
                

                在运行上述命令之前,请确保已安装 jwt 包,然后在 config 文件夹中检查其配置文件名 jwt.php

                【讨论】:

                  【解决方案9】:

                  其实解决它是对的:

                  php artisan key:generate
                  php artisan jwt:secret
                  

                  【讨论】:

                  • @Esteban 发生了什么?
                  • @Esteban 确保您的 config/jwt.php 中有 'secret' => env('JWT_SECRET'),'passphrase' => env('JWT_PASSPHRASE'),
                  • @Esteban on lumen 使用 tymon/jwt-auth 包时,我不需要 config/jwt.php 文件即可工作。在 laravel 上真的需要吗?
                  • 试试这个:1) php artisan cache:clear 2) php artisan config:clear 3) php artisan key:generate 4) php artisan jwt:secret
                  猜你喜欢
                  • 2020-01-06
                  • 2021-05-05
                  • 2021-04-10
                  • 2016-08-17
                  • 2017-11-29
                  • 2021-04-20
                  • 1970-01-01
                  • 2020-03-18
                  • 2020-01-05
                  相关资源
                  最近更新 更多