2016-08-09 120 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帶來了。