rails google ios ruby-on-rails authentication devise omniauth

ios - google - rails devise login



Rails Devise OmniAuth Facebook Iniciar sesiĆ³n desde iOS (3)

He estado buscando una solución sólida para este problema y encontré esta pregunta de SO que coincide con mi situación, pero no exactamente.

Actualmente tengo mi aplicación de iPhone autentificando con mi API de Rails a través de Autenticación básica. Es solo su paquete de autenticación de dispositivos simple y corriente. Luego seguí las instrucciones para configurar omniauth-facebook para diseñar y puse a trabajar en el navegador.

La parte que no puedo averiguar cómo hacerlo es cómo enviar el token recibido en el lado del iPhone (a través del SDK de iOS de Facebook) al servidor. Quiero que el servidor verifique la tabla de usuarios para ver si ese usuario de Facebook se ha registrado y cree una cuenta para él si no lo ha hecho. Luego, pensé que el servidor generaría una contraseña aleatoria y la enviaría al dispositivo cliente para poder mantener mi misma estrategia de autenticación básica. ¿Es esta la forma correcta de implementar el inicio de sesión único para una aplicación web y una aplicación de iPhone? ¿Cómo se podría modificar los paquetes del lado del servidor para admitir la autenticación a través de un token enviado desde el teléfono?


¿Has pensado en hacer de tu aplicación un proveedor de Oauth2?

No lo he hecho yo mismo, pero después de algunas excavaciones, parece que el opro y el portero son dos posibles soluciones al problema.

https://github.com/opro/opro https://github.com/doorkeeper-gem/doorkeeper

Parece que el opro funciona bastante bien con el dispositivo:

#inside initializers/opro.rb Opro.setup do |config| config.auth_strategy = :devise end

Definitivamente interesado en ver cómo resulta esto para ti.


Creo que tienes el plan correcto. Hemos hecho exactamente esto en nuestra aplicación y servicio web.

Las aplicaciones utilizan una API REST, una autenticación básica sobre HTTPS, una contraseña generada por el servidor, y todo esto se implementa sin Devise. Hay un método en el controlador del que se heredan todos los controladores de la API, que es una acción antes de todos los métodos de la API, y se llama ''authenticate_or_request_with_http_basic''

class ApiController < ActionController::Base before_action :authenticate_api def authenticate_api authenticate_or_request_with_http_basic do |username, password| # check server-generated password end end end

Así que eso maneja la mayoría de las solicitudes.

También tenemos una acción de controlador de API para registrar desde el dispositivo una vez para obtener la contraseña generada por el servidor:

class UsersController < ApiController skip_before_action :authenticate_api, only: [:register_fb] def register_fb graph = Koala::Facebook::API.new(params.require("access_token")) profile = graph.get_object("me?fields=email,first_name,last_name") # then go on to look up user if already exists, or create # ... return server-generated password end end

La aplicación web, sin embargo, todos los controladores heredan de WebappController y utilizan el dispositivo.

Por lo tanto, tenemos dos contraseñas en el objeto Usuario (una para web, una para móvil) y una ID de Facebook, así como nuestra propia Identificación de usuario, que es la que utilizamos para la autenticación.