我的第一个堆栈溢出问题-开始了!
我在PHPSlim API中编码了一个Firebase JWT标记来验证“购买者”的身份,
Postman JWT encoding
但当我尝试使用JWTforBearerAuthentication访问routes.php文件中的一组受保护路由时,我收到:{ "status": "\"kid\" empty, unable to lookup correct key" }
下面是我的generateJWT()函数:- 在Buyer.php类中。
{
$buyer = $buyer = self::findOrFail($id);
if (!$buyer) {
return false;
}
$key = self::JWT_KEY;
$expiration = time() + self::JWT_EXPIRE;
$issuer = 'Lab03_I425.com';
$token = [
'iss' => $issuer,
'exp' => $expiration,
'isa' => time(),
'data' => [
'uid' => $id,
'name' => $buyer->username,
'email' => $buyer->email] ];
return JWT::encode (
$token,
$key,
'HS256',
);
}
下面是我的validateJWT()函数:- -- -在Buyer.php类中
public static function validateJWT($token)
{
return JWT::decode($token, self::JWT_KEY, array('HS256') );
}
我知道有一个JWT参数$kid存在于$payload,$key,$alg params之外,但我的印象是它不需要完成身份验证。我是使用Slim,令牌和Web服务的新手,因此非常感谢您的帮助。
下面是我的BuyerController.php中的authJWT方法,它在routes.php中被调用:
public function authJWT(Request $request, Response $response)
{
$params = $request->getParsedBody();
$username = $params['username'];
$password = $params['user_password'];
$authBuyer = Buyer::authenticateBuyer($username, $password);
if ($authBuyer) {
$status_code = 200;
$jwt = Buyer::generateJWT($authBuyer->id);
$results = [
'status' => 'login successful',
'jwt' => $jwt,
'name' => $authBuyer->username
];
} else {
$status_code = 401;
$results = [
'status' => 'login failed',
];
}
//return $results;
return $response->withJson($results, $status_code,
JSON_PRETTY_PRINT);
}
我查看了---- -vendor\firebase\php-jwt\src\JWT. php- - - - -文件,发现
if (empty($kid)) {
throw new UnexpectedValueException('"kid" empty, unable to lookup correct key');
}
如果我理解正确的话,这个值可以是一个字符串或空值,显然我的值是空的(一个长度为0的字符串),如果它返回上面的UnexpectedValueException()。
为什么会这样?我如何才能改变它,使我的JWT中间件允许我访问我的分组路由?
提前感谢您的反馈和指导。
1条答案
按热度按时间ssm49v7z1#
我也遇到了同样的问题,但是在阅读Github for firebase包时,我看到他们改变了解码过程。
现在,您需要创建
Key
类的示例,并在调用decode方法时使用它,如下所示:使用那种方式修复了我的问题,解码现在也开始工作了。软件包的版本是6. 2. 0。检查您是否正在使用该版本或更高版本。