6
有沒有什麼辦法如何獲取和解析Node.js Facebook頁面選項卡應用程序中的signed_request?我需要知道頁面ID,如果用戶喜歡這個頁面...在Node.js(Express)中獲取signed_request Facebook的畫布應用程序
有沒有什麼辦法如何獲取和解析Node.js Facebook頁面選項卡應用程序中的signed_request?我需要知道頁面ID,如果用戶喜歡這個頁面...在Node.js(Express)中獲取signed_request Facebook的畫布應用程序
我之前做過這個,最後寫了一個小型庫來完成它。原來的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.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;
您可以使用這樣的:
var verifier = new SignedRequest(clientSecret, signedRequest);
verifier.verify() // whether or not the signed request verifies
verifier.data // the data from the signed request
看起來不錯。非常感謝! – Droidik 2012-08-16 20:40:28
你用signedRequest替換了什麼?我知道clientSecret是由Facebook提供的?無論如何,你可以展示你如何讓facebook api服務器端的所有東西都能夠抓取userID? – Lion789 2013-08-23 19:48:35
@Michelle 如何獲取初始編碼的signed_request。對於實施例'app.post( '/ *',函數(REQ,RES){ 的console.log( 'req.signed_request'); 變種驗證=新SignedRequest(app_secret_key,req.signed_request); 驗證。 (); console.log('verifier.data'); res.redirect('/'); });' – user1371896 2016-09-09 16:15:48