2010-12-20 90 views
6

node.js ile bir Facebook uygulaması yapmaya çalışıyorum, ancak imzalı istekleri kontrol etme konusunda sorun yaşıyorum. gibi beklenmeyen belirteç YASADIŞI: Bir istek yapmak her zaman, program SyntaxError atarNode.js JSON ayrıştırma hatası

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

suçlu fonksiyonu aşağıdaki gibidir:

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

Sadece test için, geçerli bir signed_request olurdu orada olan

WGvK-mUKB_Utg0l8gSPvf6smzacp46977pTtcRx0puE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEyOTI4MjEyMDAsImlzc3VlZF9hdCI6MTI5MjgxNDgyMCwib2F1dGhfdG9rZW4iOiIxNTI1NDk2ODQ3NzczMDJ8Mi5ZV2NxV2k2T0k0U0h4Y2JwTWJRaDdBX18uMzYwMC4xMjkyODIxMjAwLTcyMTU5OTQ3NnxQaDRmb2t6S1IyamozQWlxVldqNXp2cTBmeFEiLCJ1c2VyIjp7ImxvY2FsZSI6ImVuX0dCIiwiY291bnRyeSI6ImF1In0sInVzZXJfaWQiOiI3MjE1OTk0NzYifQ 

Neden geçerli JSON olduğu bu hatayı alıyorum ve sadece JSON bir statik dize iyi çalışır kullanarak ve Bunu düzeltmek için herhangi bir ipucu?

Teşekkürler.

+1

encoded_data [1] = { "algoritması": "HMAC-SHA 256", "sona erer": 1292821200, "issued_at": 1292814820, "oauth_token": "152549684777302 | 2.YWcqWi6OI4SHxcbpMbQh7A __ 3600,1292821200-721.599.476 | Ph4fokzKR2jj3AiqVWj5zvq0fxQ"," user ": {" locale ":" en_GB "," country ":" au "}," user_id ":" 721599476 "} – Jason

cevap

1

Tamam, biraz testten sonra sorunu kendim çözdüm, boşa giden soru için üzgünüm. Ben https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.js yanına değiştirdik

- (olmayan bir görüntüleme karakter veya dolgu vb olmalı bu yüzden vermişlerdi ancak) benim base64 kütüphanede

şey düzgün dize kod çözme değildi Ben normal base64 yerine base64url kod çözme desteklemek için modifiye edilmiş olmasına rağmen benim amaçları uygun olan ve şimdi iyi çalışıyor gibi görünüyor.

+0

Bu soruya cevap vermek için şu soruya cevap yazmış olabilirsiniz :) – Vanwaril

+3

yayınladı ama stackoverflow 3 gün beklemek zorunda kaldı. –

+0

Değişikliklerinizi paylaşırsanız harika olur mu? –