2016-08-09 129 views
1

我正在使用Firebase/JWT with php。我试图读取“解码”php文件中的令牌,但它显示Signature验证失败,不知道为什么会发生这种情况。这是怎么了编码令牌JWT“签名验证失败”,使用PHP

<?php 
use \Firebase\JWT\JWT; 
require 'vendor/autoload.php'; 

require('config/Database.php'); 
$db = new Database; 

$key = "helloworld"; 


//$jwt = JWT::encode($token, $key, 'HS512'); 

$post = file_get_contents("php://input"); 
$postdata = json_decode($post); 

if($postdata){ 

    $email = $postdata->email; 
    $password = $postdata->password; 

    $query = "SELECT * FROM users WHERE email = :email"; 
    $db->query($query); 
    $db->bind(":email", $email); 
    $rows = $db->resultset(); 

    if(password_verify($password, $rows[0]["hash"])){ 
     $rows[0]["Success"] = "Success"; 
     $token = array(
      "rows" => $rows 
     ); 
     $jwt = JWT::encode($token, $key, 'HS256'); 
     header("auth: " . $jwt); 
     echo json_encode($jwt, 128); 
    }else{ 
     echo "Failed"; 
    } 
} 


?> 

然后我在这个文件

<?php 

use \Firebase\JWT\JWT; 
require 'vendor/autoload.php'; 

require('config/Database.php'); 
$db = new Database; 

$key = "helloworld"; 


//$jwt = JWT::encode($token, $key, 'HS512'); 

$post = file_get_contents("php://input"); 
$postdata = json_decode($post); 


if($postdata){ 
    $userData = $postdata->userdata; 
    // check if token is same stored in the database then decode 
    $jwt = JWT::decode($userData, $key, array('HS256')); 

    echo $jwt; 
} 
?> 

它无法解码的令牌,返回“签名验证失败”错误。 任何帮助表示赞赏。谢谢。

+0

把代码作为文本而不是作为图片来代码 –

+1

什么是$ postdata-> userdata,你为什么要解码它?另外,你为什么'json_encode'你的'jwt'? – zerkms

+0

@zerkms $ posdata-> userdata只是从前端获取令牌和用户信息,并将其解码以获取用户的信息。 Json_encode现在不是必需的,但在发送更多数据之前,只需将jwt添加到我的角度,并且使用json格式很容易阅读。希望这可以回答你的问题。 –

回答

0

为什么它不验证的问题是因为我在jwt上使用了json_encode,并且导致它再次用引号包裹,所以令牌看起来像这样“”eY0lkajflajk ....“”并且导致验证例外。谢谢@zerkms带来了。