2011-01-26 9 views
25

He configurado la autenticación de usuario para mi aplicación Rails con Devise y Omniauth. Ahora me pregunto dónde debería comenzar a usar la misma autenticación para una aplicación de Android y iPhone que quiero crear.Devise Omniauth y la aplicación de Iphone/Android

¿Debo usar una versión móvil de mi/auth/facebook o debo enviar una solicitud directamente desde la aplicación?

Esta es una pregunta bastante general, pero no he encontrado ningún lugar para mirar.

EDITAR: Acabo de agregar Token Auth a la aplicación para usar con la API REST, me falta la parte de Omniauth/Facebook-token.

+0

tengo el SDK de Facebook creado en mi aplicación Android pero parece que la ¡la ficha que devuelvo no es la misma que la que tengo en la base de datos de mi aplicación de rieles, así que no puedo compararlos para autenticar a mi usuario! – rnaud

Respuesta

36

Bien, entonces estoy respondiendo mi propia pregunta.

Si usa el Facebook SDK, el SSO funciona bastante bien en el dispositivo, PERO, el token que recibe no es el mismo que el que recibirá en su aplicación Rails. Aparentemente Facebook crea diferentes tokens dependiendo del soporte.

Así que lo que hice fue: Una vez que reciba el token en el dispositivo Android, lo envío a mis carriles de aplicación a través de la url:

http://myapp/check_mobile_login?token=FB_MOBILE_TOKEN 

Este es entonces atrapado por mi controlador de aplicación, que utiliza el Token con la gema fb_graph para buscar datos de usuario. Si el token es válido, recibiré algunos datos. Luego compruebo con mi base de datos y, si encuentro el mismo UID, mi usuario se autentica y le devuelvo la Authentificable_token de Devise.

y el proyecto de código:

def check_mobile_login 
     token = params[:token] 

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

     logged = User.find_by_uid(user.identifier) 

     respond_to do |format| 
      format.html # index.html.erb 
      format.json { render :json => logged.authentication_token } 
     end 
    end 

Si alguien tiene una mejor solución, estaría contento de escuchar eso :)

+0

Hola, estoy tratando de hacer lo mismo y me pregunto dónde exactamente "sign_in" para idear para que la autenticación_token se genere dentro de la aplicación de rieles? – refaelos

+0

Agregue: token_authenticatable a su declaración de diseño en su modelo de Usuario, luego cada nuevo usuario obtendrá un "authentication_token" que puede usar para iniciar sesión con sus próximas solicitudes. – rnaud

+0

sí, pero tienes que "iniciar sesión_in" para regenerar un token si está vencido. también debe "iniciar sesión" para que el usuario sea el usuario actual. – refaelos

Cuestiones relacionadas