La nueva api de facebook 2.4 puede romper tu app con opauth facebook strategy

Este mensaje es para tí desarrollador de php y más concretamente usuario de opauth. Revisa tu software si estás usando opauth-facebook-strategy, por que puede que haya dejado de funcionar o que no funcione en tu próxima puesta en producción.

Para el que no conozca opauth es una capa de abstracción para la autenticación basada en oauth, de forma que se puede usar de una forma muy cómoda entre distintos proveedores del servicio de autenticación, entre ellos los más usados: Facebook, Google, Twitter y Linkedin.

En CakePHP hay un Plugin muy práctico que facilita esta funcionalidad https://github.com/uzyn/cakephp-opauth y las ‘strategies’ que complementan su uso, que son todos y cada uno de los proveedores soportados

En mi caso comencé a usar opauth-facebook para autenticar al usuario en mi aplicación y precargar algunos datos de su cuenta, como el nombre, apellidos y email. Bastante cómodo de implementar por cierto.

El problema ha sido cuando al subir el desarrollo a preproducción, los datos del usuario no eran retornados por la API Facebook ( https://graph.facebook.com/me ) . El usuario se autenticaba correctamente , pero retornaba id y name.

Después de muchas horas, verificando parámetros entre desarrollo y preproducción me he percatado, de que la app de desarrollo había sido creada con la versión 2.2 de la API y la de prepoducción con la 2.4. El cambio no es para nada trivial, y es que por defecto en la versión 2.4 hay que especificar los campos que queremos retornar en cada petición. Aquí aparece el fragmento de CHANGELOG

https://developers.facebook.com/docs/apps/changelog#v2_4_changes

Declarative Fields
To try to improve performance on mobile networks, Nodes and Edges in v2.4 requires that you explicitly request the field(s) you need for your GET requests. For example, GET /v2.4/me/feed no longer includes likes and comments by default, but GET /v2.4/me/feed?fields=comments,likes will return the data. For more details see the docs on how to request specific fields.

Vale, una vez verificado que este era el problema, he modificado el modulo opauth-facebook para que permita vía configuración indicar los campos que queremos retornar.

El probema es que la implementación no permite indicar el número de versión de API a usar, con lo que utiliza la última. Como la utilidad real del módulo es la autenticación y captura de información básica me he limitado a hacer unos cambios mínimos pero funcionales. Podéis echar un vistazo a los cambios aquí https://github.com/jsenin/facebook

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.