¿Cómo debería ser la estructura de la tabla al agregar el inicio de sesión de autenticación abierta al modelo de usuario

StackOverflow https://stackoverflow.com/questions/1809595

Pregunta

Tengo una aplicación Rails con un modelo de usuario. Quiero permitir a los usuarios iniciar sesión con un puñado de servicios. Hay dos formas en las que puedo pensar para almacenar esto en la base de datos, pero no estoy seguro de cuál es la mejor. Debo tener en cuenta que me gustaría que los usuarios puedan conectarse con más de un servicio y vincular las cuentas.

Método 1: Para cada servicio, agregue campos de token / secreto a la tabla de Usuario. Esto parece un poco problemático porque, ¿qué sucede si deseo almacenar, por ejemplo, token de twitter, secreto de twitter, nombre de usuario de twitter y perfil de twitter? Pude ver la tabla de usuario con muchas columnas no utilizadas. Puede haber información adicional que quiero almacenar con cada servicio. Se vería algo como esto:

id
twitter_token
twitter_screenname
twitter_secret
twitter_pic
facebook_token
facebook_secret
facebook_pic
facebook_name
google_token
google_secret
google_name
etc.

Método 2:
O cada usuario puede tener muchos inicios de sesión sociales y cada inicio de sesión social pertenece a un usuario. Entonces tendría una mesa que se parecía a algo como

user_id
token
secret
social_type  # foreign key to a social_site look up table
social_pic

y la tabla de tipos sociales se vería algo así como:

id
social_site_name
oauth_url

El único aspecto negativo de este enfoque es que tengo que generalizar lo que almacenaré sobre todos los servicios. ¿Como lo hacen ustedes? Quizás STI esté en orden aquí ... donde habría una clase para cada tipo de inicio de sesión que se hereda de una clase de inicio de sesión.

¡Gracias!

¿Fue útil?

Solución

Sugeriría algo como esto:

  • Cada usuario puede tener muchos inicios de sesión , cada inicio de sesión pertenece a un solo usuario .
  • Inicios de sesión son de un tipo específico , un inicio de sesión es de un solo tipo .
  • La tabla
  • SocialLogin tiene campos comunes a todos los tipos de inicio de sesión , Google , FaceBook y Twitter las tablas tienen campos específicos para cada una.

 login_model_01

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