Pregunta

Tengo un par de rieles aplicaciones Busco para integrarse con OmniAuth, pero hay un problema conceptual que estoy teniendo con lo que me gustaría averiguar primero. Considere el siguiente escenario:

  1. Su aplicación, Foo, soporta conexiones OmniAuth a través de Twitter y Facebook.
  2. Joe llega a su sitio y los registros en medio de su cuenta de Twitter. Esto crea un nuevo usuario en Foo y lo asocia con esta nueva autorización Twitter.
  3. Joe cierra la sesión de Foo, y se olvida sobre el sitio durante seis meses.
  4. Joe vuelve a Foo, sin recordar que ha iniciado una sesión previamente con Twitter.
  5. Juan inicia sesión con Facebook. Puesto que él no está conectado a través de su Twitter la autorización original, no hay manera de detectar que es, de hecho, el mismo Joe, y una nueva cuenta se crea.
  6. Joe descubre que su cuenta antigua, y ahora se siente frustrado de que su contenido más antiguo está ligado a esta cuenta de edad, y que no puede iniciar sesión con Twitter y Facebook de manera intercambiable.

Desde que Twitter no proporciona Foo con una dirección de correo electrónico, no hay ningún identificador universal a utilizar para detectar que los dos Joes son los mismos Joe. Se podría decidir apoyar sólo los proveedores que le dan dirección de correo electrónico del usuario, pero esto no ayuda si el usuario se ha registrado con diferentes direcciones de correo electrónico de diferentes proveedores.

La única otra solución que se me ocurre es dar al usuario una manera de unir dos cuentas existentes. Eso es un gran dolor de cabeza en comparación con la relativa facilidad de todo lo demás cuando se utiliza OmniAuth. Si esta es la única solución, ¿alguien ha llegado a través de una guía / tutorial que muestra un ejemplo de cómo se puede hacer esto? Me sorprende que esta cuestión no ha recibido más atención dada la popularidad de OmniAuth.

Gracias!

¿Fue útil?

Solución

Su primera impresión es correcta. Vas a tener que proporcionar una herramienta de combinación para el usuario ... o puede ignorar el problema.

Otros consejos

Sé que esto es una vieja pregunta, pero pensé que iba a responder con lo que he hecho recientemente en un proyecto de todos modos, sólo para referencia.

La revelación completa: no he venido para arriba con esto, me lo robó a alguien más en la web. Hay una buena escritura subiendo en el wiki OmniAuth .

Nunca encontró una buena manera de enlazar automagicamente Facebook / Twitter / etc cuentas sino que lo hizo por lo que el usuario puede enlazar múltiples cuentas una vez que han iniciado sesión con la primera.

Este es el escenario:

  • El usuario inicia sesión en con, por ejemplo Facebook
  • Tienen una página de perfil que enumera las redes sociales que se han adherido a la cuenta, y una opción para vincular cada tipo a la cuenta
    • por ejemplo "Linked Facebook | Twitter Enlace | Enlace Google"
  • "Enlace Twitter" por ejemplo, vínculos a la misma acción OmniAuth un usuario podría utilizar para iniciar sesión en Twitter
  • en el controlador de devolución de llamada, comprobar para ver si el usuario está conectado
    • si lo son, almacenar el proveedor y el fluido en un registro separado para el usuario
    • de lo contrario, les inicie la sesión como de costumbre

En lugar de almacenar el proveedor y el fluido en el modelo de usuario, el modelo sería entonces un usuario puede tener muchas identidades de red social.

Una vez más, lo siento por resucitar a los muertos, pero el comentario de Abe Petrillo en respuesta a la respuesta aceptada me hizo pensar en otra vista podría ser útil.

También encontré con este problema hoy en día. Creo que voy a manejar la situación de la siguiente manera:

Me preguntará al usuario para su correo electrónico y una contraseña al registrarse, al igual que en la configuración de la autenticación tradicional, donde trato de conseguir el correo electrónico del Servicio de OmniAuth el usuario ha elegido (FB, Twitter, ...) . Por lo que sólo tienen que suministrar el correo electrónico si no es suministrado por el proveedor de autenticación. Entonces, si el usuario inicia sesión después con el mismo proveedor que utilizaban para inscribirse, que se registrarán de inmediato. Esto probablemente ocurrirá en el 99% de todos los casos.

Sin embargo, tener el correo electrónico y la contraseña del usuario puede también manejar todo tipo de casos que podrían ocurrir (incluyendo el que usted describe):

  • El proveedor de autenticación original es hacia abajo o el usuario ha eliminado su cuenta de proveedor de autenticación -> Solución: El usuario puede acceder a la manera tradicional, utilizando su correo electrónico y contraseña. (Tenga en cuenta, que este es un caso importante que no he visto mencionado en cualquier lugar en la red todavía. Las personas parecen asumir que FB, Twitter, etc estará allí para siempre, nunca será hacia abajo y los usuarios nunca renunciar a sus cuentas con aquellos servicios. al no almacenar los usuarios pw y el correo electrónico que va a perder todas sus cuentas de usuario que se generaron por un proveedor si uno de estos casos ocurrs, como no se puede asignar a los usuarios más. para mí que es una dependencia inaceptable en una servicio externo.)

  • El usuario inicia sesión en adelante con un proveedor de autenticación diferente (este es su caso) -> Solución: intenta asignar al usuario a una cuenta existente utilizando su correo electrónico, si esto falla, mostrar el formulario de registro con un botón / link "ya tengo una cuenta, por favor ingrese" (o similar ;-). Si hacen clic en eso, tienen que suministrar a su correo electrónico y contraseña. Entonces, si se autentica correctamente, puede simplemente añadir que el proveedor al registro de usuario existente, y la próxima vez que se registran en distancia recta, al igual que con el proveedor que utilizaron originalmente para el registro ...

Tal vez hay otros casos que podrían ocurrir. Cualquier regeneración?

Me di cuenta de que el desbordamiento de pila aparece para tratar de superar este problema, en cierta medida, mediante el almacenamiento de la preferencia de autenticación del usuario en una cookie, y automágicamente Autenticándole cuando regrese a la página de registro.

Si bien todavía no proporciona una solución completa a este problema, es probable que ayuda a minimizar la lluvia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top