2016-08-09 3 views
1

Ich benutze Firebase/JWT mit PHP. Ich versuche, das Token in "decodierten" php-Datei zu lesen, aber es zeigt, Signatur-Verifizierung fehlgeschlagen, nicht sicher, warum das passiert. Dies ist, wie ich das TokenJWT "Signaturprüfung fehlgeschlagen" mit PHP

bin kodiert
<?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"; 
    } 
} 


?> 

Dann bin ich in dieser Datei die Token-Decodierung

<?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; 
} 
?> 

Es schlägt fehl, eine „Signaturprüfung nicht bestanden“ Fehler zurückgegeben. Jede Hilfe wird geschätzt. Vielen Dank.

+0

Es ist viel besser, den Code als Text und nicht als Bild zu geben –

+1

Was ist '$ postdata-> userdata' und warum dekodieren Sie es? Und warum "json_encode" deine "jwt"? – zerkms

+0

@zerkms $ posdata-> userdata holt nur die Token und Benutzerinformationen vom Frontend und ich entziffere sie, um die Informationen des Benutzers zu erhalten. Json_encode ist jetzt nicht notwendig, aber bevor ich mehr Daten gesendet habe, dann nur jwt zu meinem eckigen und es war einfach im JSON-Format zu lesen. Hoffentlich beantwortet dies Ihre Fragen. –

Antwort

0

Das Problem, warum es nicht überprüft wurde, war, weil ich json_encode auf dem JWT verwendet habe und dass es wieder um Anführungszeichen gewickelt wurde, so sah das Token etwa so aus "" eY0lkajflajk .... "" und das verursacht die Überprüfungsausnahme. Danke @zerkms, dass du das gemacht hast.