2010-12-20 20 views
6

Próbuję utworzyć aplikację Facebook z plikiem node.js, ale mam problem z sprawdzaniem podpisanych żądań. Za każdym razem, kiedy złożyć wniosek, program generuje SyntaxError: Nieoczekiwany token NIELEGALNE jako takie:Node.js Błąd parsowania JSON

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

Funkcja winowajcą jest poniżej:

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

Tylko dla testów ważny signed_request byłoby

WGvK-mUKB_Utg0l8gSPvf6smzacp46977pTtcRx0puE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEyOTI4MjEyMDAsImlzc3VlZF9hdCI6MTI5MjgxNDgyMCwib2F1dGhfdG9rZW4iOiIxNTI1NDk2ODQ3NzczMDJ8Mi5ZV2NxV2k2T0k0U0h4Y2JwTWJRaDdBX18uMzYwMC4xMjkyODIxMjAwLTcyMTU5OTQ3NnxQaDRmb2t6S1IyamozQWlxVldqNXp2cTBmeFEiLCJ1c2VyIjp7ImxvY2FsZSI6ImVuX0dCIiwiY291bnRyeSI6ImF1In0sInVzZXJfaWQiOiI3MjE1OTk0NzYifQ 

Dlaczego otrzymuję ten błąd, gdy jest prawidłowy JSON i po prostu za pomocą statycznego ciągu JSON będzie działać dobrze, i czy istnieje jakieś wskazówki, aby to naprawić?

Dzięki.

+1

encoded_data [1] = {algorytmu "": "HMAC-SHA256", "upływa": 1292821200, "issued_at": 1292814820, "oauth_token": "152549684777302 | 2.YWcqWi6OI4SHxcbpMbQh7A __ 3600.1292821200-721599476 | Ph4fokzKR2jj3AiqVWj5zvq0fxQ",” user ": {" locale ":" en_GB "," country ":" au "}," user_id ":" 721599476 "} – Jason

Odpowiedz

1

OK, po kilku testach sam naprawiłem problem, przepraszam za zmarnowane pytanie.

Coś w mojej bibliotece nie było dekodowania base64 ciąg poprawnie (chociaż wydawało się, że - tak musiało być non-wyświetlanie znaków lub wyściółka, etc.)

Zmieniłem się do https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.js który pasuje do moich celów, chociaż wymagał modyfikacji w celu obsługi dekodowania base64url zamiast normalnego base64, i wydaje się teraz działać dobrze.

+0

możesz zaznaczyć to pytanie jako odpowiedź następnie :) – Vanwaril

+3

Przepraszam, próbowałem tego kiedy Wysłałem to, ale stackoverflow powiedział mi, że musiałem czekać 3 dni. –

+0

Byłoby wspaniale, gdybyś mógł podzielić się swoimi modyfikacjami? –

Powiązane problemy