Cómo Firebase Auth con Rails?
He integrado completamente Firebase Auth en mi aplicación para Android, ahora quiero que el cliente interactúe con mi backend (carriles) utilizando un Token único. Mi pregunta es cómo se hace:
- El usuario ha iniciado sesión, utilizando, por ejemplo, Facebook Auth,
- Enviar el Token Firebase al backend y verificarlo
- Responder al cliente con un Token único para las próximas solicitudes de Api (obtener datos de usuarios, guardar datos de usuario …)
Gracias
- Tipo de entrada = número no es posible insertar números negativos en el teléfono móvil
- Cómo obtener el código de autorización de Google una sola vez
- Authenticity_token en Rails + Android
- ActionController InvalidAuthenticityToken en Api :: V1 :: UsersController # create
- Autenticación mediante Facebook a través de Rails API
- MultipartEntityBuilder para enviar imágenes al servidor de carril
- Convierta la aplicación Ruby on Rails en la aplicación Android PhoneGap nativa
- Dispositivo de Android de acceso de host local en la computadora portátil
- Publicar en Ruby on Rails la aplicación de android
- Sincronizar cliente Android y servidor REST
- La mejor práctica al permitir que sólo la aplicación de Android acceda a Rails API
- Cordova App en Android usando SSL enviando multipart / form-data causes Error de la aplicación de rack: # <EOFError: cuerpo de contenido incorrecto>
- Subida de imagen de Base64 VS ¿Subida de imagen binaria?
No necesita el paso # 3. La API de Firebase Auth Android SDK getToken () devuelve un Token de ID de Firebase de corta duración (una hora) para el usuario de inicio de sesión y devuelve automáticamente un nuevo token si el anterior caduca.
El documento de verificación de tokens de Firebase describe cómo obtener un token de Firebase en la aplicación de cliente y verificar el token en el lado del servidor.
Teniendo en cuenta la respuesta de JinLiu, una vez que obtenga el Token en su código android, envíelo a su backend, diga: https://www.yourbackend.com?authenticate?token=asdad7687h … Tenga en cuenta que el token generado por Firebase es un JWT Token, primero tenemos que verificar su autenticidad y decodificarlo en el backend. Para esto, necesitas agregar estas dos gemas a tu gemfile gem 'jwt', '1.5.6' gem 'rest-client', '2.0.1' Con eso hecho, necesitas agregar estas dos funciones (privadas) en Su controlador:
def get_set_user begin token = params[:token] if token.nil? @user = nil return end firebase_id = verify_user(token)[0]["user_id"] if User.where(:firebase_id => firebase_id).exists? @user = User.where(:firebase_id => firebase_id).first else @user = User.new(:firebase_id => firebase_id) @user.save @user end rescue @user = nil end end def verify_user(token) certificate_url = "https://www.googleapis.com/robot/v1/metadata/x509/[email protected]" myresponse = RestClient.get(certificate_url).body certificates = JSON.parse myresponse.gsub('=>', ':') myjson ="" certificates.each do|key , value| begin x509 = OpenSSL::X509::Certificate.new(value) iss = 'https://securetoken.google.com/<yourdomain>' aud = 'yourdomain' # change this myjson = JWT.decode(token, x509.public_key, true, { algorithm: "RS256", verify_iat: true , iss: iss , verify_iss: true , aud: aud , verify_aud: true }) return myjson rescue end end return nil end
Ahora puede llamar a get_set_user como antes de la acción para ver, si el usuario tiene un token válido. La idea es simple. Compruebe si el token está firmado por una de las teclas mencionadas en https://www.googleapis.com/robot/v1/metadata/x509/[email protected] . En caso afirmativo, descodifique el token y obtenga el ID de firebase.
- Agregar propiedades de navegación en el botón ActionBar personalizado en Android
- SocketTimeoutException mientras se conecta a la base de datos local