2010-12-20 31 views
6

Ich versuche, eine Facebook-Anwendung mit node.js zu erstellen, jedoch habe ich Probleme beim Überprüfen signierter Anfragen. Jedes Mal, wenn ich einen Antrag stellen, wirft das Programm eine Syntaxerror: unerwartete Token ILLEGAL als solche:Node.js JSON Parsing-Fehler

undefined:1 
":"721599476"} 
       ^^ 
SyntaxError: Unexpected token ILLEGAL 

Der Täter Funktion ist unten:

function parse_signed_request(signed_request, secret) { 
    encoded_data = signed_request.split('.',2); 
    // decode the data 
    sig = encoded_data[0]; 
    json = base64url.decode(encoded_data[1]); 
    data = JSON.parse(json); // ERROR Occurs Here! 

    // check algorithm - not relevant to error 
    if (!data.algorithm || data.algorithm.toUpperCase() != 'HMAC-SHA256') { 
     console.error('Unknown algorithm. Expected HMAC-SHA256'); 
     return null; 
    } 

    // check sig - not relevant to error 
    expected_sig = crypto.createHmac('sha256',secret).update(encoded_data[1]).digest('base64').replace(/\+/g,'-').replace(/\//g,'_').replace('=',''); 
    if (sig !== expected_sig) { 
     console.error('Bad signed JSON Signature!'); 
     return null; 
    } 

    return data; 
} 

Nur für die Prüfung, ein gültiger signed_request wäre

WGvK-mUKB_Utg0l8gSPvf6smzacp46977pTtcRx0puE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEyOTI4MjEyMDAsImlzc3VlZF9hdCI6MTI5MjgxNDgyMCwib2F1dGhfdG9rZW4iOiIxNTI1NDk2ODQ3NzczMDJ8Mi5ZV2NxV2k2T0k0U0h4Y2JwTWJRaDdBX18uMzYwMC4xMjkyODIxMjAwLTcyMTU5OTQ3NnxQaDRmb2t6S1IyamozQWlxVldqNXp2cTBmeFEiLCJ1c2VyIjp7ImxvY2FsZSI6ImVuX0dCIiwiY291bnRyeSI6ImF1In0sInVzZXJfaWQiOiI3MjE1OTk0NzYifQ 

Warum erhalte ich diesen Fehler, wenn es gültig JSON ist und einfach eine statische Zeichenfolge von JSON verwendet, wird funktionieren, und dort irgendwelche Tipps, um das zu beheben?

Danke.

+1

encoded_data [1] = { "Algorithmus": "HMAC-SHA256", "gültig bis": 1292821200, "issued_at": 1292814820, "oauth_token": "152549684777302 | 2.YWcqWi6OI4SHxcbpMbQh7A __ 3.600,1292821200-721.599.476 | Ph4fokzKR2jj3AiqVWj5zvq0fxQ",“ user ": {" locale ":" de_GB "," country ":" au "}," user_id ":" 721599476 "} – Jason

Antwort

1

Ok, nach ein bisschen Testen habe ich das Problem selbst behoben, Entschuldigung für die vergeudete Frage.

Etwas in meinem base64-Bibliothek wurde nicht decodiert die Zeichenfolge richtig (obwohl es zu sein schien - so ist es ein Nicht-Anzeigen von Zeichen oder padding gewesen sein muss, etc.)

ich über https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.js geändert haben Das ist für meine Zwecke geeignet, obwohl es geändert werden muss, um die base64url-Decodierung statt der normalen base64 zu unterstützen, und es scheint jetzt gut zu funktionieren.

+0

möchten Sie vielleicht diese Frage als beantwortet dann zu markieren :) – Vanwaril

+3

Entschuldigung, ich habe versucht, wenn ich gepostet, aber stackoverflow sagte mir, ich musste 3 Tage warten. –

+0

Wäre es toll, wenn Sie Ihre Änderungen teilen könnten? –

Verwandte Themen