Base de datos externa frente al almacén de datos de Auth0
- Escalabilidad: El almacén de datos de Auth0 tiene limitaciones de escalabilidad, y los datos de su aplicación pueden superar los límites adecuados. Al usar una base de datos externa, mantiene simple su almacén de datos de Auth0, mientras que la base de datos externa, más eficiente, contiene los datos adicionales;
- Rendimiento: Es probable que se acceda a sus datos de autenticación con menos frecuencia que a sus otros datos. El almacén de datos de Auth0 no está optimizado para un uso de alta frecuencia, por lo que debería almacenar en otro lugar los datos que deban recuperarse más a menudo;
- Flexibilidad: Debido a que el almacén de datos de Auth0 se creó para admitir únicamente perfiles de usuario y sus metadatos asociados, sus posibilidades de actuar sobre la base de datos son limitadas. Al usar bases de datos independientes para sus otros datos, puede gestionarlos según corresponda y realizar llamadas directas sin usar la de Auth0.
- Por ejemplo, podría tener una tabla Users que enumere cada usuario autenticado por Auth0. Cada vez que un usuario inicie sesión, podría buscar a ese usuario en la tabla. Si el usuario no existe, crearía un nuevo registro. Si sí existe, actualizaría todos los campos, manteniendo así una copia local de todos los datos del usuario.
- Como alternativa, podría almacenar el identificador del usuario en cada tabla/colección que tenga datos asociados al usuario. Esta es una implementación más sencilla, adecuada para aplicaciones más pequeñas.
Escenario de ejemplo de almacenamiento de datos de usuario
Metadatos
Metadatos de la aplicación
app_metadata:
- Plan de suscripción del usuario
- Derecho del usuario (o su falta de autorización) para editar listas de reproducción destacadas
app_metadata en lugar de user_metadata porque el usuario no debería poder modificarlos directamente.
Metadatos de usuario
user_metadata:
- Preferencias de la aplicación
- Opciones elegidas por el usuario para modificar su experiencia en la aplicación al iniciar sesión.
app_metadata, el usuario puede cambiar fácilmente los almacenados en user_metadata.
Podemos permitir que el usuario cambie su displayName, que es el nombre que ve al iniciar sesión y que se muestra a otros usuarios de la aplicación.
Para mostrar el identificador elegido por el usuario cada vez que inicia sesión, usamos una Rule para obtener el valor de user.user_metadata.
displayName:

user_metadata:
Sustituya {yourAccessToken} por un Token de acceso de Management API.
Reglas de permisos para datos de usuario
Asignar el rol Playlist Editor
playlist_editor como un valor del array roles en app_metadata.
El parámetro scope especifica roles
app_metadata y asigna el arreglo roles a un campo del objeto del usuario para que se pueda acceder a él sin necesidad de llamar a app_metadata desde la aplicación. El parámetro scope puede entonces especificar roles cuando el usuario inicia sesión, sin incluir todo el contenido de app_metadata en el objeto del usuario:
playlist_editor está en el array roles almacenado en app_metadata del usuario, se le dará la bienvenida como EDITOR después de iniciar sesión:

Asociar la música de un usuario a ese usuario
user_id y es la subpropiedad sub del objeto idTokenPayload en un authResult. Esta es una fila de ejemplo de la tabla songs de nuestra base de datos:
| song_id | songname | user_id |
|---|---|---|
| 1 | Number One Hit | google-oauth2 |
GET a /secured/getFavGenre, la API llama a la función queryGenre(), que consulta la base de datos y responde con el género favorito del usuario.
buildAPIRequest() toma la ruta y el método HTTP de la solicitud como parámetros y crea una solicitud con la URL base de nuestra API de Node.js alojada en Heroku.
En la aplicación, la función getGenre() realiza una solicitud a la API y cambia la interfaz para mostrar la respuesta de la solicitud a /genres/getFav. El backend recupera los datos necesarios para esta acción mediante la función queryGenre() y devuelve los resultados a la aplicación: