Jwt身份验证错误参数3传递给Lcobucci \ JWT \ Signer \ Hmac :: doVerify()

时间:2018-11-19 16:50:59

标签: php laravel authentication jwt

我正在研究一个学习laravel的项目,我看到了一些使用jwt auth的教程。它运行良好,但现在并不总是显示错误,但我不知道为什么。就是这样:

  

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

有时它可以工作,但不可以。所以我不知道该怎么办。我尝试过

  1. php artisan cache:clear
  2. php artisan config:clear
  3. php artisan jwt:secret

但是问题仍然存在,有时我从server(200)那里得到了很好的答案,但是大部分时候还是很糟糕(500)。

屏幕截图

enter image description here

enter image description here

8 个答案:

答案 0 :(得分:1)

实际上这是解决问题的正确方法:

php artisan jwt:secret

答案 1 :(得分:1)

这个错误可能发生在

  • HANDLE hFile = CreateFile( fileName, // lpFileName READ_CONTROL, // dwDesiredAccess 0, // dwShareMode NULL, // lpSecurityAttributes OPEN_EXISTING, // dwCreationDisposition FILE_FLAG_BACKUP_SEMANTICS, // dwFlagsAndAttributes NULL ); // hTemplateFile JWT_SECRET
  • 上丢失
  • .envJWT_SECRET
  • 中被注释
  • .env 的值有误。

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

解决:

  1. 打开 JWT_SECRET 并删除 .env 值(请注意,您必须将其删除而不是注释)。
  2. 运行JWT_SECRET

答案 2 :(得分:0)

完整的代码段

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

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

答案 3 :(得分:0)

在测试后部署我的应用程序时,我遇到了此错误,其他所有内容在本地服务器上均正常运行。

我注意到以下情况;

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

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

JWT_SECRET = roCZauuldMpw5i4039393939393372y98bEWumqd9ls7Uk8DEpr0gIZ6WIWB

希望这会有所帮助:)

答案 4 :(得分:0)

我已经在Hostinger上解决了相同的问题-共享主机与其他人解释的方式有些不同。在共享主机上,用户将无权访问shell / cmd / ssh对服务器的访问权限-因此,我已经使用composer执行了命令-感谢ÁngelCarlos 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”位,然后重新部署了代码

答案 5 :(得分:0)

php artisan jwt:secret
php artisan config:cache

这两个命令就足够了

答案 6 :(得分:0)

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

答案 7 :(得分:0)

如果您不记得将 JWT_SECRET 添加到 Vapor 使用的 env 文件中,也可能在使用 Laravel Vapor 服务时发生这种情况。

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

vapor env:pull staging

并向其添加 JWT_SECRECT 行,然后推送:

vapor env:push staging

并重新部署。