Laravel JWT身份验证令牌无效/无法验证签名
我对这个错误越来越厌倦了。。现在卡住了两天 我确实收到了一个有效凭证上的令牌,但我的令牌保持无效,无论我是通过url参数(?token=[token])传递还是作为身份验证头(Bearer:[token])。 有人还在经历这一切吗?我遵循了教程中的所有内容。还在我的公用文件夹和apache配置中配置了Laravel JWT身份验证令牌无效/无法验证签名,laravel,jwt,Laravel,Jwt,我对这个错误越来越厌倦了。。现在卡住了两天 我确实收到了一个有效凭证上的令牌,但我的令牌保持无效,无论我是通过url参数(?token=[token])传递还是作为身份验证头(Bearer:[token])。 有人还在经历这一切吗?我遵循了教程中的所有内容。还在我的公用文件夹和apache配置中配置了.htaccess Route::get('/test', function () { return JWTAuth::parseToken()->authenticate(); });
.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
那样在.env文件中设置)php artisan密钥:Generate
- 复制不带括号的密钥(
)并将其添加到.env文件中,如jwt auth secret[DSvO98YtJ0204mBu9zqWN9QOMX7Tmvr9]集。
或您可以在jwt.phpjwt_secret=DSvO98YtJ0204mBu9zqWN9QOMX7Tmvr9
secret'=>env(
中更改其格式。
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令牌