¿Hay alguna forma de obtener y analizar firma_request en la aplicación de pestaña Node.js de la página de Facebook? Necesito saber la identificación de la página y si el usuario le gusta la página ...Obtenga la solicitud firmada en Node.js (Express) Facebook
6
A
Respuesta
10
Hice esto hace un tiempo, y terminé escribiendo una pequeña biblioteca para hacerlo. El CoffeeScript original se puede encontrar en https://gist.github.com/fbef51815ab6f062b51a#file_signed_request.coffee, aquí es una traducción de 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;
que se puede utilizar de esta manera:
var verifier = new SignedRequest(clientSecret, signedRequest);
verifier.verify() // whether or not the signed request verifies
verifier.data // the data from the signed request
Cuestiones relacionadas
- 1. Cómo recibir JSON en la solicitud POST de node.js express?
- 2. node.js express app.get y app.post
- 3. Obtener el contenido de la URL en Node.js con Express
- 4. Node.js y Express en Windows
- 5. Localización en node.js con express
- 6. internacionalización en Node.js, Express, i18n
- 7. Node.js/Express Caching
- 8. Eventos personalizados en Node.js con Express framework
- 9. Node.js, Express y Jade - Formas
- 10. Node.js + Express: Rutas vs controlador
- 11. node.js - utilizando soldadura con express?
- 12. enrutamiento Node.js/Express con params get
- 13. Llamadas API simples con Node.js y Express
- 14. Cómo manejar errores en Node.js usando Express
- 15. manejo de excepciones en node.js y express
- 16. Rutas de vista múltiple en Node.js + Express
- 17. ¿Cómo manejar rutas relativas en node.js/express?
- 18. Comprensión de vhost en Express Node.js
- 19. Enviando solicitud http en node.js
- 20. Integrando Ember.js con Node.js (Express + Tower.js)
- 21. Node.js http solicitud pipelining
- 22. Permitir solicitud CORT REST a una aplicación Express/Node.js en Heroku
- 23. Acceder a la solicitud actual en la vista Express/Jade
- 24. ¿Qué son diseños en la Biblioteca Express de Node.js?
- 25. Duración de la sesión en node.js con express y MongoDB
- 26. Node.js, express y usando desarrollo versus producción en la app.configure
- 27. Construir una solicitud de LogOut de SAML2 firmada
- 28. Integrando Angular.js con Node.js (Express + Tower.js)
- 29. Node.js - express - jade - compile SASS/LESS
- 30. Node.js + Express - ¿Cómo funciona parciales de bigote?
se ve bien. ¡Muchas gracias! – Droidik
¿Con qué reemplazas la sesión signedRequest? Sé que el clientSecret está dado por Facebook. De todos modos, ¿puede mostrar cómo hizo que todo funcionara para el lado del servidor API de Facebook para capturar el ID de usuario? – Lion789
@Michelle cómo recuperar el pedido firmado firmado inicial. Para el Ejemplo 'app.post ('/ *', function (req, res) { console.log ('req.signed_request'); var verificador = new SignedRequest (app_secret_key, req.signed_request); verificador. verify(); console.log ('verifier.data'); res.redirect ('/'); }); ' – user1371896