2010-12-20 20 views
6

मैं node.js के साथ एक फेसबुक एप्लिकेशन बनाने का प्रयास कर रहा हूं, हालांकि मुझे हस्ताक्षरित अनुरोधों की जांच करने में समस्या हो रही है। जैसे अप्रत्याशित टोकन अवैध:: हर बार जब मैं एक अनुरोध करते हैं, कार्यक्रम एक सिंटैक्स त्रुटि फेंकताNode.js JSON पार्सिंग त्रुटि

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

अपराधी समारोह नीचे है:

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

बस के परीक्षण के लिए, एक वैध signed_request होगा

WGvK-mUKB_Utg0l8gSPvf6smzacp46977pTtcRx0puE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEyOTI4MjEyMDAsImlzc3VlZF9hdCI6MTI5MjgxNDgyMCwib2F1dGhfdG9rZW4iOiIxNTI1NDk2ODQ3NzczMDJ8Mi5ZV2NxV2k2T0k0U0h4Y2JwTWJRaDdBX18uMzYwMC4xMjkyODIxMjAwLTcyMTU5OTQ3NnxQaDRmb2t6S1IyamozQWlxVldqNXp2cTBmeFEiLCJ1c2VyIjp7ImxvY2FsZSI6ImVuX0dCIiwiY291bnRyeSI6ImF1In0sInVzZXJfaWQiOiI3MjE1OTk0NzYifQ 

मुझे यह त्रुटि क्यों मिल रही है जब यह वैध JSON है और बस JSON की स्थिर स्ट्रिंग का उपयोग करके ठीक काम करेगा, और वहां हैं इसे ठीक करने के लिए कोई सुझाव?

धन्यवाद।

+1

encoded_data [1] = { "एल्गोरिथ्म": "HMAC-SHA256", "समाप्त हो रहा है": +१२९२८२१२००, "issued_at": +१२९२८१४८२०, "oauth_token": "। 152549684777302 | 2.YWcqWi6OI4SHxcbpMbQh7A __ 3,600.1292821200-721,599,476 | Ph4fokzKR2jj3AiqVWj5zvq0fxQ" " उपयोगकर्ता ": {" लोकेल ":" en_GB "," देश ":" au "}," user_id ":" 721599476 "} – Jason

उत्तर

1

ठीक है, परीक्षण के बाद मैंने समस्या को ठीक कर दिया है, बर्बाद प्रश्न के लिए खेद है। मेरी बेस 64 पुस्तकालय में

कुछ ठीक से स्ट्रिंग डिकोडिंग नहीं किया गया था (हालांकि यह प्रतीत होता है - तो यह एक गैर प्रदर्शित चरित्र या पैडिंग, आदि के लिए किया गया है चाहिए)

मैं https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.js के लिए खत्म बदल दिया है जो मेरे उद्देश्यों के अनुरूप है, हालांकि सामान्य बेस 64 की बजाय base64url डिकोडिंग का समर्थन करने के लिए संशोधित करने की आवश्यकता है, और ऐसा लगता है कि यह ठीक काम करता है।

+0

आप इस प्रश्न को उत्तर के रूप में चिह्नित करना चाहते हैं :) – Vanwaril

+3

क्षमा करें, मैंने कोशिश की कि जब मैं इसे पोस्ट किया लेकिन स्टैक ओवरफ्लो ने मुझे बताया कि मुझे 3 दिन इंतजार करना पड़ा। –

+0

यदि आप अपने संशोधन साझा कर सकते हैं तो बहुत अच्छा होगा? –

संबंधित मुद्दे