Laravel JWT身份验证令牌无效/无法验证签名

Laravel JWT身份验证令牌无效/无法验证签名,laravel,jwt,Laravel,Jwt,我对这个错误越来越厌倦了。。现在卡住了两天 我确实收到了一个有效凭证上的令牌,但我的令牌保持无效,无论我是通过url参数(?token=[token])传递还是作为身份验证头(Bearer:[token])。 有人还在经历这一切吗?我遵循了教程中的所有内容。还在我的公用文件夹和apache配置中配置了.htaccess Route::get('/test', function () { return JWTAuth::parseToken()->authenticate(); });

我对这个错误越来越厌倦了。。现在卡住了两天

我确实收到了一个有效凭证上的令牌,但我的令牌保持无效,无论我是通过url参数(?token=[token])传递还是作为身份验证头(Bearer:[token])。 有人还在经历这一切吗?我遵循了教程中的所有内容。还在我的公用文件夹和apache配置中配置了
.htaccess

Route::get('/test', function () {
  return JWTAuth::parseToken()->authenticate();
});
走这条路线返回

NamshiAdapter.php
第71行中的TokenInvalideException: 无法验证令牌签名。 对于查找,这里是我的AuthController.php中的身份验证方法

public function authenticate(Request $request) {
    $credentials = $request->only('email', 'password');

    $user = User::where('email', Input::get('email'))->first();

    try {
        if (!$token = JWTAuth::attempt($credentials)) {
            return $this->respondUnauthorized();
        }
    } catch (JWTException $e) {
          return $this->respondInternalError('Could not create token!');
    }
    // dd()
    return $this->respond([
        'token' => compact('token'),
        'user' => $user]);
}
我的路由中间件组:

Route::group(['middleware' => ['jwt.auth', 'jwt.refresh']], function() {
当我检查NamshiAdapter中的第71行时,我dd()我的令牌,它说我的秘密是空的

一定是出什么事了?这只是一个小错误还是我遗漏了什么?

我也有同样的问题

解决方案就是jycr753所说的。。。“在jwt.php中设置api机密”

事实上,在config/jwt.php上有一行
'secret'=>env('jwt_secret'),

  • 使用此帮助程序生成密钥
    php artisan jwt:Generate
    (出于某种原因,我不知道为什么它没有像
    php artisan密钥:Generate
    那样在.env文件中设置)

  • 复制不带括号的密钥(
    jwt auth secret[DSvO98YtJ0204mBu9zqWN9QOMX7Tmvr9]集。
    )并将其添加到.env文件中,如
    jwt_secret=DSvO98YtJ0204mBu9zqWN9QOMX7Tmvr9
    或您可以在jwt.php
    secret'=>env(中更改其格式。

在Laravel 5.5中(以我为例):

1-运行命令:

php artisan jwt:secret
您应该看到以下结果:

jwt身份验证密钥[mygeneratedsecret]设置成功

2-复制位于括号(mygeneratedsecret)之间的机密,并将其添加到.env文件中,如下所示:

JWT_SECRET=mygeneratedsecret
'secret' => env('JWT_SECRET'),
3-确保您的配置文件
jwt.php
具有如下设置的机密:

JWT_SECRET=mygeneratedsecret
'secret' => env('JWT_SECRET'),
重要提示:

不要忘记重新生成令牌(使用您的登录脚本或您使用的任何东西),因为旧令牌(在秘密配置之前) 对新秘密仍然无效


快乐编码:)

您需要在配置文件夹中的jwt.php中设置api密码。。。laravel将生成令牌,但由于密钥不存在,因此无法验证,因此应用程序不知道它是否为合法令牌您是否运行了
php artisan jwt:secret
?两者都运行过,也尝试为jwt生成密钥,但没有自动设置(这是另一个错误),手动设置它解决不了问题@G3EK1337出于好奇,您使用的是哪个版本的JWT?因为我遇到了一些类似的问题,结果是另一个包出现了
namshi/jose
版本问题,并且令牌无法验证。嗯,我相信它是0.5.9。。?在我的composer.json中,它表示“>=0.5”。。我在哪里可以查到确切的版本?我尝试用composer update更新它@G3EK1337最后一行应该是文件config/JWT.php中的env('JWT_SECRET','DSvO98YtJ0204mBu9zqWN9QOMX7Tmvr9'),在您有
'SECRET'=>env('JWT_SECRET')
的行中,使用命令
php artisan jwt:generate
生成密钥后,复制该密钥,它可能与我的密钥不同,并替换jwt.php文件中的jwt_密钥,确保在生成新的jwt_密钥后通过auth端点重新生成auth user令牌