在Node.js(Express)Facebook画布应用程序中获取signed_request [英] Get signed_request in Node.js (Express) Facebook canvas app

查看:127
本文介绍了在Node.js(Express)Facebook画布应用程序中获取signed_request的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法在Node.js的Facebook页面标签应用程序中获取和解析signed_request?我需要知道页面ID,如果用户喜欢的页面...

解决方案

我这样做了一段时间,结束了写一个小图书馆来做。原始的CoffeeScript可以在 https://gist.github.com/fbef51815ab6f062b51a#file_signed_request.coffee找到,这里是一个JavaScript翻译:

  var crypto = require('crypto'); 

SignedRequest =(function(){

function SignedRequest(secret,request){
this.secret = secret;
this.request = request ;
this.verify = this.verify.bind(this);

var parts = this.request.split('。');
this.encodedSignature = parts [ 0];
this.encoded = parts [1];
this.signature = this.base64decode(this.encodedSignature);
this.decoded = this.base64decode(this.encoded);
this.data = JSON.parse(this.decoded);
}

SignedRequest.prototype.verify = function(){
if(this.data。算法!=='HMAC-SHA256'){
return false;
}
var hmac = crypto.createHmac('SHA256',this.secret);
hmac.update (this.encoded);
var result = hmac.digest('base64')。replace(/ \ // g,'_')。replace(/ \ + / g,' - ')。替换(/ \ = / g,'');
返回结果=== this.encodedSignature;
};

SignedRequest.pr ototype.base64encode = function(data){
return new Buffer(data,'utf8')。toString('base64')。replace(/ \ // g,'_')replace(/ \ + / g,' - ')。replace(/ \ = / g,'');
};

SignedRequest.prototype.base64decode = function(data){
while(data.length%4!== 0){
data + ='=';
}
data = data.replace(/ - / g,'+')。replace(/ _ / g,'/');
return new Buffer(data,'base64')。toString('utf-8');
};

return SignedRequest;

})();

module.exports = SignedRequest;

您可以使用这样的方式:

  var verifier = new SignedRequest(clientSecret,signedRequest); 
verifier.verify()//签名请求是否验证
verifier.data //签名请求中的数据


is there any way how to get and parse signed_request in Node.js Facebook page tab app? I need to know page id and if user liked the page...

解决方案

I did this a little while ago, and ended up writing a small library to do it. The original CoffeeScript can be found at https://gist.github.com/fbef51815ab6f062b51a#file_signed_request.coffee, here is a JavaScript translation:

var crypto = require('crypto');

SignedRequest = (function() {

  function SignedRequest(secret, request) {
    this.secret = secret;
    this.request = request;
    this.verify = this.verify.bind(this);

    var parts = this.request.split('.');
    this.encodedSignature = parts[0];
    this.encoded = parts[1];
    this.signature = this.base64decode(this.encodedSignature);
    this.decoded = this.base64decode(this.encoded);
    this.data = JSON.parse(this.decoded);
  }

  SignedRequest.prototype.verify = function() {
    if (this.data.algorithm !== 'HMAC-SHA256') {
      return false;
    }
    var hmac = crypto.createHmac('SHA256', this.secret);
    hmac.update(this.encoded);
    var result = hmac.digest('base64').replace(/\//g, '_').replace(/\+/g, '-').replace(/\=/g, '');
    return result === this.encodedSignature;
  };

  SignedRequest.prototype.base64encode = function(data) {
    return new Buffer(data, 'utf8').toString('base64').replace(/\//g, '_').replace(/\+/g, '-').replace(/\=/g, '');
  };

  SignedRequest.prototype.base64decode = function(data) {
    while (data.length % 4 !== 0) {
      data += '=';
    }
    data = data.replace(/-/g, '+').replace(/_/g, '/');
    return new Buffer(data, 'base64').toString('utf-8');
  };

  return SignedRequest;

})();

module.exports = SignedRequest;

Which you can use like this:

var verifier = new SignedRequest(clientSecret, signedRequest);
verifier.verify() // whether or not the signed request verifies
verifier.data // the data from the signed request

这篇关于在Node.js(Express)Facebook画布应用程序中获取signed_request的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆