2012-05-25 11 views
7

Los usuarios de mi aplicación Rails puede autenticar en una de estas 2 maneras:autenticación por medio de Facebook a través de la API de Rails

  • El uso de su cuenta de Facebook
  • Utilizando nuestra propia autenticación

estoy usando Facebook SDK en Android y devise y omniauth en Rails.

¿Cómo me autentico contra mi aplicación Rails en Android para que pueda obtener la información que necesito del servidor?

NB: Me he dado cuenta de que esta pregunta está recibiendo una buena cantidad de visitas recientemente. No sigas muy de cerca los consejos dados en este hilo: ¡la web se mueve rápido y data de hace 3 años!

Respuesta

2

Esto se puede hacer utilizando la gema fb_graph (no fbgraph!).

Usted sólo puede añadirlo a su Gemfile y hacer

user = FbGraph::User.me(token).fetch 

donde token es el token de OAuth se consiguió mediante el uso de, por ejemplo, el SDK de Facebook en Android. user.email será la dirección de correo electrónico del usuario (si configura los permisos necesarios).

Se puede utilizar esta URL para la prueba:

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token 
+1

Solo note que esta respuesta recibió algo de atención. Tenga en cuenta que esto fue hace 2.5 años y que muchas cosas pueden haber cambiado desde entonces. ¡Ten cuidado con lo que tomas de esto! –

0

Eso depende totalmente de cómo funciona su sistema de autenticación. Tendrá que crear una API en su servidor para manejar la comunicación desde la aplicación de Android y pasar información entre ambos usando la API.

+0

utilizo concebir y OmniAuth, que es más o menos cómo funciona. Para Android, uso el SDK de Facebook. –

+0

El Facebook SDK solo se autenticará con Facebook. Tendrá que crear una biblioteca de Android que se autentique con su sitio web de Rails. Esa es la única forma en que puede recuperar la información de su servidor de forma segura. –

+0

Mi servidor se auths con Facebook a través de Omniauth.Me preguntaba si podría usar el SDK de Facebook para registrar al usuario y luego hacer un 'GET' a' users/auth/facebook' para que el usuario también pueda ser autenticado con mi servidor. (¿Esto es confuso? Lo reescribiré si no pudiera explicarlo) –

0

Niraj Shah tiene toda la razón, aunque la respuesta podría no ser lo suficientemente detallada para usted. Para una respuesta en profundidad a su pregunta, eche un vistazo a Securing an API railscast by Ryan Bates que ha sido lanzado recientemente. Cubre HTTP Basic Auth.

Es posible que también desee echarle un vistazo a la opción más avanzada para proteger su API/proporcionar a los usuarios registrados acceso a sus datos. También hay un tema sobre este: http://railscasts.com/episodes/353-oauth-with-doorkeeper, aunque es un episodio profesional, por lo que debes registrarte para verlo.

+0

Gracias por los enlaces. Estoy usando el dispositivo, no es la autenticación incorporada de HTTP. –

+0

¡La autenticación de la API está desacoplada de la autenticación de usuarios! En teoría, puede enviar el nombre de usuario/contraseña (o provider + uid, o cualquier otra cosa que pueda usar para identificar unívocamente a un usuario) con cada solicitud a la API y autenticarse en su contra. Sin embargo, este es solo un estilo malo (¡y si lo haces, asegúrate de usar SSL!). Autenticar usando tokens como en OAuth es el camino a seguir. – emrass

+0

OK, idear admite autorizaciones basadas en tokens, intentando cambiar a eso. Todavía no entiendo cómo debo autorizar a un usuario que inicia sesión con Facebook. –

0

Francisco, tengo exactamente la misma necesidad.

El escenario de diseño con token_authenticatable parece sencillo y no debería ser un problema, pero no estoy seguro de la mejor manera de manejar el escenario de Facebook. En el lado web, para FB auth estoy usando omniauth-facebook como se documenta aquí: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview. Creo que esto utiliza OAuth con FB como proveedor, por lo que es una buena posibilidad que el último RailsCast sobre el portero que asegura una API con OAuth debería ser el truco. No lo he intentado todavía, pero lo haré pronto a menos que me lo ganes. Aquí está el enlace: http://railscasts.com/episodes/353-oauth-with-doorkeeper.

+0

Hola. Pronto publicaré una respuesta a mi propia pregunta por posterioridad. Lo que tienes que hacer es usar la gema 'fb_graph' (no' fbgraph'!). Luego puede agregarlo a su gemfile y hacer 'user = FbGraph :: User.me (token) .fetch', donde' token' es el token oauth que obtuvo al usar, por ejemplo, el SDK de Facebook en Android. 'user.email' tendrá la dirección de correo electrónico del usuario (si configura los permisos necesarios). No dude en ponerse en contacto conmigo si no estaba claro. –

+0

Para fines de prueba, puede usar 'irb' y' GET' en esta página: https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success. html & response_type = token Si tuvo éxito, se le redirigirá a un URI con el token de acceso. Entonces puedes usar ese token de la manera mencionada anteriormente. –

+0

excelente, eso funcionará, gracias! –

Cuestiones relacionadas