17

Tengo una aplicación Rails 3.1 que utiliza Devise for Authentication con un modelo de usuario simple con correo electrónico, contraseña, etc. Necesito poder autenticar desde una aplicación iphone. ¿Cómo expongo esta funcionalidad? Las respuestas generales están bien ya que no estoy seguro de cuáles son mis opciones.Exposición de Rails/Devise Authentication a la aplicación iOS

+0

Todos los controladores de diseño responden a json y xml, haciendo una interfaz REST completamente posible – zsquare

+2

Honestamente, tengo exactamente el mismo problema. Entiendo REST, y mi API está funcionando bien. Pero no puedo entender el concepto de iniciar sesión desde el dispositivo iOS. (Estoy utilizando RestKit como marco, si eso ayuda). ¿Puede alguien seguir los pasos necesarios para que el dispositivo iOS se autentique con la aplicación Rails, y luego llamar continuamente a las llamadas REST para obtener la información? ¿Cómo se almacena la sesión? ¿Puedes? ¿Necesita pasar las credenciales de usuario con cada llamada? ¿Puedes usar un token de algún tipo? ¿Cómo formatear la llamada para obtener la información? ¡La ayuda también sería genial para mí! –

+0

@Wayfarer Exactamente. Estoy pensando que el servicio web debe pasar algún tipo de token al dispositivo una vez que se haya autenticado correctamente, que el dispositivo puede usar para identificarse con cualquier comunicación, pero no estoy seguro de cómo funcionaría esto en términos prácticos. Obviamente, el modelo de usuario podría almacenar algún tipo de token único para cada usuario que se comparte después de la autenticación, pero no estoy seguro de la mecánica de publicarlo. – Undistraction

Respuesta

11

La manera más rápida sería simplemente habilitar http_authenticatable y pasar el nombre de usuario y la contraseña a través de HTTP Basic Auth. Si bien es la manera más fácil, significa que debe almacenar la contraseña de los usuarios en texto plano y enviarla junto con cada solicitud que realice.

Una mejor opción es la autenticación de tokens, puede pasarla a través de parámetros o autenticación básica HTTP (en cuyo caso puede establecer la contraseña en "X" y el token en el nombre de usuario). La ventaja de esto es que puedes usar el nombre de usuario/contraseña inicialmente para obtener el token y luego usarlo para cualquier autenticación adicional.

La forma más sencilla de hacer la autenticación de token con la cantidad mínima de código sería habilitar la autenticación HTTP en Devise y configurar un nuevo controlador que requiera que el usuario haya iniciado sesión y todo lo que hace es dar como resultado reset_authentication_token. Una vez que tenga el token, lo pasará a cualquier solicitud futura de autenticación HTTP para iniciar sesión.

+0

¿Habilita http_authenticatable y despliega el horrible nombre de usuario/contraseña si intenta iniciar sesión desde el sitio web? Todavía necesito que los usuarios inicien sesión a través del sitio web y a través de una interfaz limpia. –

+0

@ Zachary Anker Gracias por su respuesta. ¿Puede confirmar que estoy entendiendo este derecho ... Un dispositivo golpearía http://somesite.com/users/sign_in, pasando nombre de usuario y contraseña como parámetros de una solicitud POST. Rails verificaría estos detalles y, si fuera correcto, devolvería un token. El dispositivo almacenaría ese token y lo usaría en futuras comunicaciones. Entonces, ¿de dónde sacan los rieles la ficha? ¿Genera un token único para cada usuario? ¿El token expira? – Undistraction

+0

@Wayfarer No debería. Siempre que sea un formato de navegación como HTML, no debería aparecer un cuadro de diálogo de autenticación HTTP. Si no desea que aparezca, también puede implementar la verificación de contraseña en el controlador que devuelve el token de autenticación. –

Cuestiones relacionadas