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.
Es posible que desee echar un vistazo aquí:
Código abierto: Anuncio de dispositivos iOS para una autenticación simplificada
Parece una forma relativamente indolora de trabajar con Rails / Devise y iOS. Definitivamente planeo usarlo en mi próximo proyecto.