Estoy usando la pantalla de inicio de sesión y registro proporcionada por Auth0 ( https://auth0.com/docs/quickstart/webapp/nextjs/01-login#add-login-to-your-application ) para mi aplicación. Configuré una devolución de llamada después del registro donde creo un perfil en mi base de datos con el correo electrónico como clave principal.
El problema con el que me encuentro es que en mi pantalla de inicio, tengo un botón que dice "Registrarse como administrador" y otro "Registrarse como usuario". ¿Cómo paso a esta pantalla de registro de Auth0 si el usuario hace clic en "usuario" o "administrador" para que en la devolución de llamada pueda crear el perfil con "usuario" o "administrador"?
Puede agregar un parámetro de state a la solicitud /authorize para mantener el estado entre la solicitud y la devolución de llamada.
En Auth0, si necesita discriminar entre "usuario" o "administrador", puede extraer el parámetro de estado especificado en la solicitud /authorize del objeto de contexto ( context.request para ser específico); consulte aquí las propiedades del objeto de contexto en Auth0 normas.
No determina el registro como administrador o usuario en el front-end, esto se hace en el back-end. En la autenticación auth0, agrega reglas en el panel auth). Cuando inicia sesión en auth0, puede seleccionar una plantilla de regla o puede crear la suya propia:
un ejemplo de guion:
function (user, context, callback) { user.app_metadata = user.app_metadata || {}; // You can add a Role based on what you want // In this case I check email //***** DETERMINE ADMINS HERE ******* var addRolesToUser = function(user, cb) { if (user.email === "Email@email.com") { cb(null, ['admin']); } else { cb(null, ['guest']); } }; addRolesToUser(user, function(err, roles) { if (err) { callback(err); } else { user.app_metadata.roles = roles; auth0.users.updateAppMetadata(user.user_id, user.app_metadata) .then(function(){ context.idToken[NAMESPACE] = user.app_metadata.roles; context.accessToken[NAMESPACE] = user.app_metadata.roles; callback(null, user, context); }) .catch(function(err){ callback(err); }); } }); }