sql >> Base de Datos >  >> RDS >> Database

Inicio de sesión con servicios externos

Introducir un nombre de usuario y una contraseña es una forma de acceder a una cuenta, pero no es la única. En este artículo, veremos cómo habilitar servicios externos (como Google o Facebook) al iniciar sesión en una base de datos.

¿Qué son los inicios de sesión de servicios externos?

Darle a un usuario la opción de acceder a sus cuentas del sistema a través de servicios externos es una tendencia creciente entre los diseñadores web. Esta opción puede proporcionar varios beneficios, como dar a los usuarios una combinación menos de nombre y contraseña para recordar. También puede ayudar a los administradores a personalizar las experiencias de los usuarios.

Cuando las aplicaciones web ofrecen un inicio de sesión de servicio externo, la pantalla de inicio de sesión se ve como la imagen a continuación. Un usuario puede ingresar su nombre de usuario y contraseña, o puede hacer clic en un botón que lo redirigirá al servicio de su elección (Facebook, Twitter, Google, etc.) donde iniciará sesión y será redirigido a la aplicación original.

Aquí hay una pantalla de inicio de sesión de muestra de Vertabelo Academy:

Cómo funcionan los inicios de sesión externos

Agregar servicios de inicio de sesión externos requiere un trabajo adicional por parte de los desarrolladores. Los servicios de redes sociales más populares usan un protocolo llamado OAuth 2.0 . Solo Twitter usa un protocolo más antiguo llamado OAuth 1.0 . El protocolo permite leer la información del usuario, como su nombre completo, correo electrónico, sexo, etc. La información exacta disponible depende del servicio de redes sociales y de lo que haya proporcionado el usuario. (Por ejemplo, es posible tener una cuenta de Facebook sin una dirección de correo electrónico adjunta). Sin embargo, nos centraremos en cómo implementar este sistema en el diseño de una base de datos.

Como punto de partida, utilizaremos nuestro artículo anterior sobre recuperación de contraseña y confirmación por correo electrónico como base. Aquí están las tablas relacionadas con el usuario de este artículo.




Diseño de una base de datos para inicios de sesión externos

Mucha información en la user_account La tabla está relacionada con el manejo de la autenticación, además de funciones relacionadas como el recordatorio de contraseña y la confirmación por correo electrónico, por nuestra cuenta. No necesitamos estas columnas si el usuario se autentica con un servicio externo. El servicio externo gestiona el recordatorio de contraseña, la confirmación por correo electrónico y otras funciones. El primer paso en nuestro diseño es separar la user_account tabla en dos tablas:user_account y user_profile .

La user_account table ahora maneja toda su propia contabilidad de autenticación. El user_profile La tabla representa la información real del usuario:nombre, correo electrónico, zona horaria, aceptación de los términos del servicio, etc. Todas las tablas de negocios ahora deben estar relacionadas con el user_profile mesa.

Ahora a las cuentas externas. El OAuth protocolo, al final, nos da un identificador para el usuario en su sistema. Este identificador no es el nombre del usuario en el sistema externo. Es solo un identificador para nuestra aplicación. Tenemos que almacenar esta identificación interna en nuestra base de datos. Podríamos agregar columnas anulables facebook_id , google_id , twitter_id , etc. a la tabla user_profile . Pero haremos algo diferente.

Agregaremos nuevas tablas:facebook_account , twitter_account , google_account , que almacenará la identificación externa. De esta manera, si lo necesitamos, podemos agregar información adicional específicamente para cada sitio web social. Si queremos agregar una posibilidad de inicio de sesión para otro sitio web social, no tendremos que cambiar el user_profile mesa. Solo agregaremos otra external_service_account mesa.

Cada una de las nuevas tablas comparte el mismo formato de columna. Uno de ellos será int user_profile_id , que es una clave externa que hace referencia a la columna id en el user_profile tabla y la clave principal. (Esto puede servir como clave principal porque no se deben asociar dos cuentas en nuestro sistema con varias cuentas del mismo servicio externo).

La otra columna será la identificación de la cuenta externa:facebook_id , por ejemplo. Hay una restricción única en cada uno de los facebook_id , google_id y twitter_id columnas Sabemos que no hay dos cuentas con la misma identificación. De hecho, cuando el usuario se autentica con un servicio externo conocemos su facebook_id . Cuando encontramos la fila correspondiente en la facebook_account tabla y busque el user_profile , sabemos qué usuario acaba de iniciar sesión en el sistema. Si no hay una fila con esta identificación, creamos una nueva fila en el user_profile y una nueva fila en la tabla de cuentas correspondiente.

Aquí está el modelo final: