Node.js JSON-parsing-Fehler
Ich bin versucht, machen Sie eine Facebook-Anwendung mit node.js aber ich habe Probleme bei der Prüfung von signierten Anfragen. Jedes mal, wenn ich einen Antrag, das Programm wirft einen SyntaxError: Unexpected token ILLEGAL als solche:
undefined:1
":"721599476"}
^^
SyntaxError: Unexpected token ILLEGAL
Den Schuldigen 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, eine gültige signed_request wäre
WGvK-mUKB_Utg0l8gSPvf6smzacp46977pTtcRx0puE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEyOTI4MjEyMDAsImlzc3VlZF9hdCI6MTI5MjgxNDgyMCwib2F1dGhfdG9rZW4iOiIxNTI1NDk2ODQ3NzczMDJ8Mi5ZV2NxV2k2T0k0U0h4Y2JwTWJRaDdBX18uMzYwMC4xMjkyODIxMjAwLTcyMTU5OTQ3NnxQaDRmb2t6S1IyamozQWlxVldqNXp2cTBmeFEiLCJ1c2VyIjp7ImxvY2FsZSI6ImVuX0dCIiwiY291bnRyeSI6ImF1In0sInVzZXJfaWQiOiI3MjE1OTk0NzYifQ
Warum bin ich immer diese Fehlermeldung, wenn es gültig ist JSON und einfach über einen statischen string mit JSON funktioniert Prima, und gibt es irgendwelche Tipps um dies zu beheben?
Dank.
encoded_data[1] = {"algorithm":"HMAC-SHA256","expires":1292821200,"issued_at":1292814820,"oauth_token":"152549684777302/2.YWcqWi6OI4SHxcbpMbQh7A__.3600.1292821200-721599476|Ph4fokzKR2jj3AiqVWj5zvq0fxQ","user":{"locale":"en_GB","country":"au"},"user_id":"721599476"}
InformationsquelleAutor Adam M-W | 2010-12-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, nach ein bisschen testen hab ich das problem behoben mich, sorry für die Frage verschwendet.
Etwas in meiner base64-Bibliothek war nicht decodieren der Zeichenfolge korrekt (obwohl es zu sein schien - so muss es gewesen sein, eine nicht-Anzeige der Zeichen oder Leerstellen, etc).
Habe ich umgestellt auf https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.js was für meine Zwecke, obwohl Sie geändert werden müsse, um die Unterstützung base64url Decodierung, eher als normale base64, und es scheint zu funktionieren jetzt.
sorry, das habe ich versucht, wenn ich es gepostet aber stackoverflow sagte mir, ich hatte zu 3 Tage warten.
Wäre toll, wenn könnten Sie teilen Ihre Modifikationen?
Nicht sicher, welche änderungen Ihr zu Fragen, und ganz ehrlich gesagt, ich kann mich nicht erinnern, das war vor etwa 2 Jahren, und ich bin mir sicher, dass sich die Dinge geändert haben. Haben Sie einen Blick auf github.com/heroku/facebook-template-nodejs um Ihnen den Einstieg mit Facebook-API, wenn es das ist, was Ihr tut, sonst, base64url sollte die gleiche wie die normale base64-mit einem string ersetzen-für die Sonderzeichen.
InformationsquelleAutor Adam M-W