【问题标题】:Node.js JSON parsing errorNode.js JSON 解析错误
【发布时间】:2011-05-28 01:30:21
【问题描述】:

我正在尝试使用 node.js 制作 Facebook 应用程序,但是在检查签名请求时遇到了问题。每次我发出请求时,程序都会抛出 SyntaxError: Unexpected token ILLEGAL 如下:

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

仅用于测试,有效的签名请求将是

WGvK-mUKB_Utg0l8gSPvf6smzacp46977pTtcRx0puE.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEyOTI4MjEyMDAsImlzc3VlZF9hdCI6MTI5MjgxNDgyMCwib2F1dGhfdG9rZW4iOiIxNTI1NDk2ODQ3NzczMDJ8Mi5ZV2NxV2k2T0k0U0h4Y2JwTWJRaDdBX18uMzYwMC4xMjkyODIxMjAwLTcyMTU5OTQ3NnxQaDRmb2t6S1IyamozQWlxVldqNXp2cTBmeFEiLCJ1c2VyIjp7ImxvY2FsZSI6ImVuX0dCIiwiY291bnRyeSI6ImF1In0sInVzZXJfaWQiOiI3MjE1OTk0NzYifQ

为什么当它是有效的 JSON 并且简单地使用 JSON 的静态字符串时会出现此错误,并且有任何提示可以解决此问题?

谢谢。

【问题讨论】:

  • encoded_data[1] = {"algorithm":"HMAC-SHA256","expires":1292821200,"issued_at":1292814820,"oauth_token":"152549684777302|2.YWcqWi6OI4SHxcbpMbQh9271__.36000.36000. |Ph4fokzKR2jj3AiqVWj5zvq0fxQ","user":{"locale":"en_GB","country":"au"},"user_id":"721599476"}

标签: javascript json facebook node.js parse-error


【解决方案1】:

好的,经过一些测试,我自己解决了这个问题,很抱歉浪费了这个问题。

我的 base64 库中的某些内容没有正确解码字符串(尽管它看起来是 - 所以它一定是一个不显示的字符或填充等)

我已更改为适合我的目的的https://github.com/kriszyp/commonjs-utils/blob/master/lib/base64.js,尽管需要进行修改以支持base64url解码而不是普通的base64,现在它似乎工作正常。

【讨论】:

  • 抱歉,我在发布时尝试过,但 stackoverflow 告诉我必须等待 3 天。
  • 如果你能分享你的修改会很棒吗?
  • 不确定您询问的是哪些修改,坦率地说我不记得了,这是大约 2 年前的事了,我相信事情会发生变化。看看github.com/heroku/facebook-template-nodejs,让你开始使用 Facebook API,如果你这样做的话,否则,base64url 应该与普通 base64 相同,并用字符串替换特殊字符。
猜你喜欢
  • 1970-01-01
  • 2017-09-03
  • 2017-04-06
  • 2014-12-11
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多