¿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
-
05-07-2019 - |
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!
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
yTwitter
las tablas tienen campos específicos para cada una.