
Una API basada en JWT para gestionar usuarios y emitir tokens JWT
Auth es un servidor de autenticación y gestión de usuarios escrito en Go que impulsa las funciones de Supabase, como:
Originalmente se basa en el excelente código base de GoTrue de Netlify; sin embargo, ambos han divergido significativamente en características y capacidades.
Si deseas contribuir al proyecto, consulta la guía de contribución.
Crea un archivo .env para almacenar tus propias variables de entorno personalizadas. Consulta example.env
docker-compose -f docker-compose-dev.yml up postgresmake build . Deberías ver una salida como esta:```bash
go build -ldflags "-X github.com/supabase/auth/cmd.Version=git rev-parse HEAD"
GOOS=linux GOARCH=arm64 go build -ldflags "-X github.com/supabase/auth/cmd.Version=git rev-parse HEAD" -o gotrue-arm643. Ejecuta el binario de auth: `./auth`
### Si tienes Docker instalado
Crea un archivo `.env.docker` para almacenar tus propias variables de entorno personalizadas. Consulta [`example.docker.env`](https://github.com/supabase/auth/blob/HEAD/example.docker.env)
1. `make build`
2. `make dev`
3. `docker ps` debería mostrar dos contenedores Docker (`auth-auth-1` y `auth-postgres-1`)
4. ¡Eso es todo! Visita el [endpoint de verificación de salud](http://localhost:9999/health) para confirmar que auth está en ejecución.
## Ejecución en producción
Ejecutar un servidor de autenticación en producción no es tarea fácil. Recomendamos usar [Supabase Auth](https://supabase.com/auth), que recibe actualizaciones de seguridad periódicas.
De lo contrario, asegúrate de configurar un proceso para actualizar rápidamente a la última versión. Puedes hacerlo siguiendo este repositorio, especialmente las secciones [Releases](https://github.com/supabase/auth/releases) y [Avisos de seguridad](https://github.com/supabase/auth/security/advisories).
### Compatibilidad hacia atrás
Auth utiliza el esquema de [Versionado Semántico](https://semver.org). Aquí hay algunas aclaraciones adicionales sobre las garantías de compatibilidad hacia atrás:
**Compatibilidad con la API de Go**
Auth no está pensado para usarse como una biblioteca de Go. No hay garantías de compatibilidad de API hacia atrás cuando se usa de esta manera, independientemente del número de versión que cambie.
**Parche**
Los cambios en la versión de parche garantizan compatibilidad hacia atrás con:
- Objetos de base de datos (tablas, columnas, índices, funciones).
- API REST
- Estructura JWT
- Configuración
Ejemplos garantizados:
- Una columna no cambiará su tipo.
- Una tabla no cambiará su clave primaria.
- Un índice no se eliminará.
- Una restricción de unicidad no se eliminará.
- Una API REST no se eliminará.
- Los parámetros de las API REST funcionarán de manera equivalente a antes (o mejor, si se ha corregido un error).
- La configuración no cambiará.
Ejemplos no garantizados:
- Una tabla puede agregar nuevas columnas.
- Las columnas de una tabla pueden reordenarse.
- Las restricciones no únicas pueden eliminarse (comprobaciones a nivel de base de datos, null, valores predeterminados).
- JWT puede agregar nuevas propiedades.
**Menor**
Los cambios en la versión menor garantizan compatibilidad hacia atrás con:
- API REST
- Estructura JWT
- Configuración
Se harán excepciones a estas garantías solo cuando se encuentren problemas de seguridad graves que no puedan remediarse de otra manera.
Ejemplos garantizados:
- Las API existentes pueden quedar obsoletas, pero seguirán funcionando durante las próximas versiones menores.
- Los cambios de configuración pueden quedar obsoletos, pero seguirán funcionando durante las próximas versiones menores.
- Los JWT ya emitidos se aceptarán, pero los nuevos JWT pueden tener una estructura diferente (aunque generalmente similar).
Ejemplos no garantizados:
- Eliminación de campos JWT después de un aviso de obsolescencia.
- Eliminación de ciertas API después de un aviso de obsolescencia.
- Eliminación del inicio de sesión con proveedores externos, después de un aviso de obsolescencia.
- Borrado, truncamiento o cambios significativos de esquema en tablas, índices, vistas y funciones.
Nuestro objetivo es proporcionar un aviso de obsolescencia en los registros de ejecución durante al menos dos versiones mayores o dos semanas si se publican varias versiones. La compatibilidad estará garantizada mientras el aviso esté activo.
**Mayor**
Los cambios en la versión mayor no garantizan ninguna compatibilidad hacia atrás con versiones anteriores.
### Funciones heredadas
Ciertas funciones heredadas de la base de código de Netlify no son compatibles con Supabase y pueden eliminarse sin previo aviso en el futuro. Esta es una lista completa de esas funciones:
1. Multiinquilino mediante la tabla `instances`, es decir, el parámetro de configuración `GOTRUE_MULTI_INSTANCE_MODE`.
2. Usuario del sistema (usuario UUID cero).
3. Superadministrador mediante la columna `is_super_admin`.
4. Información de grupo en JWT mediante `GOTRUE_JWT_ADMIN_GROUP_NAME` y otros campos de configuración.
5. Firma JWT. Supabase Auth admite claves asimétricas (RS256 por defecto; ECC/Ed25519 opcional). HS256 todavía se admite por compatibilidad, pero se recomienda migrar a claves asimétricas para una validación y rotación más fáciles. Las futuras obsolescencias se anunciarán en el changelog. Consulta [Claves de firma JWT](https://supabase.com/docs/guides/auth/signing-keys) y [la guía de JWTs](https://supabase.com/docs/guides/auth/jwts) para más detalles.
Ten en cuenta que esta no es una lista exhaustiva y puede cambiar.
### Buenas prácticas al auto-alojar
Estas son algunas buenas prácticas a seguir al auto-alojar para asegurar la compatibilidad hacia atrás con Auth:
1. No modifiques el esquema administrado por Auth. Puedes ver todas las migraciones en el directorio `migrations`.
2. No te bases en el esquema ni en la estructura de los datos en la base de datos. Usa siempre las API de Auth y los JWT para inferir información sobre los usuarios.
3. Ejecuta siempre Auth detrás de un proxy compatible con TLS, como un balanceador de carga, CDN, nginx u otro software similar.
## Configuración
Puedes configurar Auth usando un archivo de configuración llamado `.env`, variables de entorno o una combinación de ambos. Las variables de entorno tienen el prefijo `GOTRUE_` y siempre tendrán prioridad sobre los valores proporcionados mediante archivo.
### Nivel superior```properties
GOTRUE_SITE_URL=https://example.netlify.com/
SITE_URL - string obligatorio
La URL base donde se encuentra tu sitio. Actualmente se usa en combinación con otros ajustes para construir las URLs utilizadas en los correos electrónicos. Cualquier URI que comparta un host con SITE_URL es un valor permitido para los parámetros redirect_to (ver /authorize, etc.).
URI_ALLOW_LIST - string
Una lista de URIs separadas por comas (p. ej. "https://foo.example.com,https://*.foo.example.com,https://bar.example.com") que están permitidas como destinos redirect_to válidos. El valor predeterminado es []. Admite coincidencia con comodines mediante globbing. Por ejemplo, https://*.foo.example.com permitirá que se acepten https://a.foo.example.com y https://b.foo.example.com. El globbing también se admite en subdominios. Por ejemplo, https://foo.example.com/* permitirá que se acepten https://foo.example.com/page1 y https://foo.example.com/page2.
Para patrones glob más comunes, consulta el siguiente enlace.
OPERATOR_TOKEN - string Solo modo multi-instancia
El secreto compartido con un operador (normalmente Netlify) para este microservicio. Se utiliza para verificar que las solicitudes han pasado por el proxy del operador y que se puede confiar en los valores del payload.
DISABLE_SIGNUP - bool
Cuando el registro está deshabilitado, la única forma de crear nuevos usuarios es mediante invitaciones. El valor predeterminado es false, con todos los registros habilitados.
GOTRUE_EXTERNAL_EMAIL_ENABLED - bool
Úsalo para deshabilitar los registros por correo electrónico (los usuarios aún pueden usar proveedores OAuth externos para registrarse / iniciar sesión)
GOTRUE_EXTERNAL_PHONE_ENABLED - bool
Úsalo para deshabilitar los registros por teléfono (los usuarios aún pueden usar proveedores OAuth externos para registrarse / iniciar sesión)
GOTRUE_RATE_LIMIT_HEADER - string
Cabecera sobre la que se aplica el límite de tasa al endpoint /token. Se espera que esta cabecera sea establecida por un proxy ascendente de confianza (como Kong o Envoy). Cabeceras como x-forwarded-for son falsificables y no se puede confiar en ellas para el límite de tasa cuando las proporciona directamente el cliente.
GOTRUE_RATE_LIMIT_EMAIL_SENT - string
Limita el número de correos electrónicos enviados por hora en los siguientes endpoints: /signup, /invite, /magiclink, /recover, /otp y /user.
GOTRUE_PASSWORD_MIN_LENGTH - int
Longitud mínima de la contraseña, el valor predeterminado es 6.
GOTRUE_PASSWORD_REQUIRED_CHARACTERS - una cadena de conjuntos de caracteres separados por :. Una contraseña debe contener al menos un carácter de cada conjunto para ser aceptada. Para usar el carácter :, escápalo con \.
GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED - bool
Si la rotación del token de actualización está habilitada, la autenticación detectará automáticamente intentos maliciosos de reutilizar un token de actualización revocado. Cuando se detecta un intento malicioso, GoTrue revoca inmediatamente todos los tokens que descienden del token infractor.
GOTRUE_SECURITY_REFRESH_TOKEN_REUSE_INTERVAL - string
Este ajuste solo es aplicable si GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED está habilitado. El intervalo de reutilización de un token de actualización permite intercambiar el token de actualización varias veces durante el intervalo para soportar problemas de concurrencia o de modo offline. Durante el intervalo de reutilización, la autenticación no considerará el uso de un token revocado como un intento malicioso y simplemente devolverá el token de actualización hijo.
Solo el token revocado anterior puede reutilizarse. Usar un token de actualización antiguo mucho antes del token de actualización válido actual activará la detección de reutilización.
GOTRUE_API_HOST=localhost PORT=9999 API_EXTERNAL_URL=http://localhost:9999
`API_HOST` - `string`
Nombre de host en el que escuchar.
`PORT` (no prefix) / `API_PORT` - `number`
Número de puerto en el que escuchar. El valor predeterminado es `8081`.
`API_ENDPOINT` - `string` _Solo modo multi-instancia_
Controla en qué endpoint Netlify puede acceder a esta API.
`API_EXTERNAL_URL` - `string` **obligatorio**
La URL a través de la cual se puede acceder a GoTrue.
`REQUEST_ID_HEADER` - `string`
Si desea heredar un ID de solicitud de la solicitud entrante, especifique el nombre en este valor.
### Base de datos```properties
GOTRUE_DB_DRIVER=postgres
DATABASE_URL=root@localhost/auth
DB_DRIVER - string obligatorio
Selecciona el dialecto de base de datos que deseas. Debe ser postgres.
DATABASE_URL (sin prefijo) / DB_DATABASE_URL - string obligatorio
Cadena de conexión para la base de datos.
GOTRUE_DB_MAX_POOL_SIZE - int
Establece el número máximo de conexiones abiertas a la base de datos. El valor predeterminado es 0, lo que equivale a un número "ilimitado" de conexiones.
DB_NAMESPACE - string
Añade un prefijo a todos los nombres de las tablas.
Nota sobre las migraciones
Las migraciones se aplican automáticamente cuando ejecutas ./auth. Sin embargo, también tienes la opción de volver a ejecutar las migraciones mediante los siguientes métodos:
./auth migratedocker run --rm auth gotrue migrateLOG_LEVEL=debug # available without GOTRUE prefix (exception) GOTRUE_LOG_FILE=/var/log/go/auth.log
`LOG_LEVEL` - `string`
Controla qué niveles de registro se emiten. Elige entre `panic`, `fatal`, `error`, `warn`, `info` o `debug`. Por defecto es `info`.
`LOG_FILE` - `string`
Si deseas que los registros se escriban en un archivo, establece `log_file` a una ruta de archivo válida.
### Observabilidad
Auth tiene observabilidad básica integrada. Es capaz de exportar métricas y trazas de [OpenTelemetry](https://opentelemetry.io) a un recolector.
#### Trazas
Para habilitar las trazas configura estas variables:
`GOTRUE_TRACING_ENABLED` - `bool`
`GOTRUE_TRACING_EXPORTER` - `string` solo se admite `opentelemetry`
Asegúrate de configurar también la configuración del [Exportador
de OpenTelemetry](https://opentelemetry.io/docs/reference/specification/protocol/exporter/) para tu recolector o servicio.
Por ejemplo, si usas
[Honeycomb.io](https://docs.honeycomb.io/getting-data-in/opentelemetry/go-distro/#using-opentelemetry-without-the-honeycomb-distribution) deberías establecer estas variables estándar de OTLP de OpenTelemetry:```
OTEL_SERVICE_NAME=auth
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io:443
OTEL_EXPORTER_OTLP_HEADERS="x-honeycomb-team=<API-KEY>,x-honeycomb-dataset=auth"
Para habilitar las métricas configura estas variables:
GOTRUE_METRICS_ENABLED - boolean
GOTRUE_METRICS_EXPORTER - string, solo se admiten opentelemetry y
prometheus
Asegúrate también de configurar la configuración del Exportador OpenTelemetry para tu collector o servicio.
Si usas el exportador prometheus, el host y el puerto del servidor se pueden
configurar con estas variables estándar de OpenTelemetry:
OTEL_EXPORTER_PROMETHEUS_HOST - dirección IP, por defecto 0.0.0.0
OTEL_EXPORTER_PROMETHEUS_PORT - número de puerto, por defecto 9100
Las métricas se exportan en la ruta / del servidor.
Si usas el exportador opentelemetry, las métricas se envían al collector.
Por ejemplo, si usas Honeycomb.io debes establecer estas variables estándar OTLP de OpenTelemetry:``` OTEL_SERVICE_NAME=auth OTEL_EXPORTER_OTLP_PROTOCOL=grpc OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io:443 OTEL_EXPORTER_OTLP_HEADERS="x-honeycomb-team=,x-honeycomb-dataset=auth"
Ten en cuenta que Honeycomb.io requiere un plan de pago para ingerir métricas.
Si necesitas depurar un problema con trazas o métricas que no se están enviando, puedes
establecer `DEBUG=true` para obtener más información del SDK de OpenTelemetry.
#### Atributos de recurso personalizados
Al usar el exportador de trazas o métricas de OpenTelemetry, puedes definir atributos
de recurso personalizados mediante la [variable de entorno estándar `OTEL_RESOURCE_ATTRIBUTES`](https://opentelemetry.io/docs/reference/specification/resource/sdk/#specifying-resource-information-via-an-environment-variable).
Se proporciona un atributo predeterminado `auth.version` que contiene la versión de compilación.
#### Trazado de rutas HTTP
Todas las llamadas HTTP a la API de Auth se rastrean. Las rutas usan la versión
parametrizada de la ruta, y los valores de los parámetros de la ruta se pueden encontrar como
el atributo de span `http.route.params.<route-key>`.
Por ejemplo, la siguiente solicitud:```
GET /admin/users/4acde936-82dc-4552-b851-831fb8ce0927/
será rastreado como:``` http.method = GET http.route = /admin/users/{user_id} http.route.params.user_id = 4acde936-82dc-4552-b851-831fb8ce0927
#### Métricas de runtime de Go y HTTP
Todas las métricas de runtime de Go están expuestas. Algunas métricas HTTP también se recopilan por defecto.
### JSON Web Tokens (JWT)```properties
GOTRUE_JWT_SECRET=supersecretvalue
GOTRUE_JWT_EXP=3600
GOTRUE_JWT_AUD=netlify
JWT_SECRET - string requerido
El secreto utilizado para firmar los tokens JWT.
JWT_EXP - number
Cuánto tiempo son válidos los tokens, en segundos. El valor predeterminado es 3600 (1 hora).
JWT_AUD - string
La audiencia JWT predeterminada. Usa audiencias para agrupar usuarios.
JWT_ADMIN_GROUP_NAME - string
El nombre del grupo de administradores (si está habilitado). El valor predeterminado es admin.
JWT_DEFAULT_GROUP_NAME - string
El grupo predeterminado al que se asignan todos los usuarios nuevos.
Admitimos apple, azure, bitbucket, discord, facebook, figma, github, gitlab, google, keycloak, linkedin, notion, snapchat, spotify, slack, twitch, y para la autenticación externa.
Usa los nombres como claves debajo de external para configurar cada uno por separado.```properties
GOTRUE_EXTERNAL_GITHUB_ENABLED=true
GOTRUE_EXTERNAL_GITHUB_CLIENT_ID=myappclientid
GOTRUE_EXTERNAL_GITHUB_SECRET=clientsecretvaluessssh
GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=http://localhost:3000/callback
No se requieren proveedores externos, pero debes proporcionar los valores requeridos si decides habilitar alguno.
`EXTERNAL_X_ENABLED` - `bool`
Si este proveedor externo está habilitado o no
`EXTERNAL_X_CLIENT_ID` - `string` **requerido**
El ID de cliente OAuth2 registrado con el proveedor externo.
`EXTERNAL_X_SECRET` - `string` **requerido**
El secreto de cliente OAuth2 proporcionado por el proveedor externo cuando te registraste.
`EXTERNAL_X_REDIRECT_URI` - `string` **requerido**
La URI a la que un proveedor OAuth2 redirigirá con los valores `code` y `state`.
`EXTERNAL_X_URL` - `string`
La URL base utilizada para construir las URLs para solicitar tokens de autorización y acceso. Usada por `gitlab` y `keycloak`. Para `gitlab`, por defecto es `https://gitlab.com`. Para `keycloak`, debes configurarla con tu instancia, por ejemplo: `https://keycloak.example.com/realms/myrealm`
#### Endurecimiento de la red
Configurar un proveedor de autenticación externo hace que Auth realice solicitudes HTTP salientes a los endpoints de autorización, token y userinfo de ese proveedor. Configurar un proveedor, ya sea mediante los ajustes `GOTRUE_EXTERNAL_*` o una API de administración, es una acción administrativa e implica confiar en los hosts y URLs que serán contactados.
La red en la que se ejecuta Auth debe endurecerse para que estas conexiones salientes no puedan alcanzar recursos exclusivamente internos que no quieras exponer, como direcciones `localhost`/loopback o endpoints de metadatos de la nube (por ejemplo, `169.254.169.254`). Esto es especialmente importante en proveedores con endpoints configurables o detectables por el administrador (por ejemplo, proveedores OAuth/OIDC personalizados), donde una URL mal configurada o maliciosa podría utilizarse para alcanzar infraestructura interna.
#### OAuth de Apple
Para probar la autenticación externa con Apple localmente, deberás hacer lo siguiente:
1. Reasigna localhost a \<my_custom_dns \> en tu configuración de `/etc/hosts`.
2. Configura auth para servir tráfico HTTPS a través de localhost reemplazando `ListenAndServe` en [api.go](https://github.com/supabase/auth/blob/HEAD/internal/api/api.go) por: ```
func (a *API) ListenAndServe(hostAndPort string) {
log := logrus.WithField("component", "api")
path, err := os.Getwd()
if err != nil {
log.Println(err)
}
server := &http.Server{
Addr: hostAndPort,
Handler: a.handler,
}
done := make(chan struct{})
defer close(done)
go func() {
waitForTermination(log, done)
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
server.Shutdown(ctx)
}()
if err := server.ListenAndServeTLS("PATH_TO_CRT_FILE", "PATH_TO_KEY_FILE"); err != http.ErrServerClosed {
log.WithError(err).Fatal("http server listen failed")
}
}
GOTRUE_EXTERNAL_APPLE_SECRET siguiendo este post.El envío de correos electrónicos no es obligatorio, pero es muy recomendable para la recuperación de contraseñas. Si está habilitado, debe proporcionar los valores requeridos a continuación.```properties GOTRUE_SMTP_HOST=smtp.mandrillapp.com GOTRUE_SMTP_PORT=587 GOTRUE_SMTP_USER=[email protected] GOTRUE_SMTP_PASS=correcthorsebatterystaple GOTRUE_SMTP_ADMIN_EMAIL=[email protected] GOTRUE_MAILER_SUBJECTS_CONFIRMATION="Please confirm"
`SMTP_ADMIN_EMAIL` - `string` **required**
La dirección de correo electrónico `From` para todos los correos enviados.
`SMTP_HOST` - `string` **required**
El nombre de host del servidor de correo a través del cual enviar los correos.
`SMTP_PORT` - `number` **required**
El número de puerto para conectarse al servidor de correo.
`SMTP_USER` - `string`
Si el servidor de correo requiere autenticación, el nombre de usuario a utilizar.
`SMTP_PASS` - `string`
Si el servidor de correo requiere autenticación, la contraseña a utilizar.
`SMTP_MAX_FREQUENCY` - `number`
Controla la cantidad mínima de tiempo que debe transcurrir antes de enviar otro correo de confirmación de registro o de restablecimiento de contraseña. El valor es el número de segundos. El valor predeterminado es 900 (15 minutos).
`SMTP_SENDER_NAME` - `string`
Establece el nombre del remitente. El valor predeterminado es `SMTP_ADMIN_EMAIL` si no se utiliza.
`MAILER_AUTOCONFIRM` - `bool`
Si no requiere confirmación de correo electrónico, puede establecer esto en `true`. El valor predeterminado es `false`.
`MAILER_OTP_EXP` - `number`
Controla la duración durante la cual un enlace de correo electrónico o un OTP es válido.
`MAILER_URLPATHS_INVITE` - `string`
Ruta de URL a utilizar en el correo de invitación de usuario. El valor predeterminado es `/verify`.
`MAILER_URLPATHS_CONFIRMATION` - `string`
Ruta de URL a utilizar en el correo de confirmación de registro. El valor predeterminado es `/verify`.
`MAILER_URLPATHS_RECOVERY` - `string`
Ruta de URL a utilizar en el correo de restablecimiento de contraseña. El valor predeterminado es `/verify`.
`MAILER_URLPATHS_EMAIL_CHANGE` - `string`
Ruta de URL a utilizar en el correo de confirmación de cambio de correo electrónico. El valor predeterminado es `/verify`.
`MAILER_SUBJECTS_INVITE` - `string`
Asunto del correo electrónico a utilizar para la invitación de usuario. El valor predeterminado es `You've been invited`.
`MAILER_SUBJECTS_CONFIRMATION` - `string`
Asunto del correo electrónico a utilizar para la confirmación de registro. El valor predeterminado es `Confirm your email address`.
`MAILER_SUBJECTS_RECOVERY` - `string`
Asunto del correo electrónico a utilizar para el restablecimiento de contraseña. El valor predeterminado es `Reset your password`.
`MAILER_SUBJECTS_MAGIC_LINK` - `string`
Asunto del correo electrónico a utilizar para el correo de enlace mágico. El valor predeterminado es `Your sign-in link`.
`MAILER_SUBJECTS_EMAIL_CHANGE` - `string`
Asunto del correo electrónico a utilizar para la confirmación de cambio de correo electrónico. El valor predeterminado es `Confirm your new email address`.
`MAILER_SUBJECTS_REAUTHENTICATION` - `string`
Asunto del correo electrónico a utilizar para la reautenticación. El valor predeterminado es `{{ .Token }} is your verification code`.
`MAILER_SUBJECTS_PASSWORD_CHANGED_NOTIFICATION` - `string`
Asunto del correo electrónico a utilizar para la notificación de cambio de contraseña. El valor predeterminado es `Your password was changed`.
`MAILER_SUBJECTS_EMAIL_CHANGED_NOTIFICATION` - `string`
Asunto del correo electrónico a utilizar para la notificación de cambio de correo electrónico. El valor predeterminado es `Your email address was changed`.
`GOTRUE_MAILER_SUBJECTS_PHONE_CHANGED_NOTIFICATION` - `string`
Asunto del correo electrónico a utilizar para la notificación de cambio de número de teléfono. El valor predeterminado es `Your phone number was changed`.
`GOTRUE_MAILER_SUBJECTS_IDENTITY_LINKED_NOTIFICATION` - `string`
Asunto del correo electrónico a utilizar para la notificación de identidad vinculada. El valor predeterminado es `A new sign-in method was linked to your account`.
`GOTRUE_MAILER_SUBJECTS_IDENTITY_UNLINKED_NOTIFICATION` - `string`
Asunto del correo electrónico a utilizar para la notificación de identidad desvinculada. El valor predeterminado es `A sign-in method was removed from your account`.
`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_ENROLLED_NOTIFICATION` - `string`
Asunto del correo electrónico a utilizar para la notificación de método de verificación añadido. El valor predeterminado es `A new verification method was added to your account`.
`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_UNENROLLED_NOTIFICATION` - `string`
Asunto del correo electrónico a utilizar para la notificación de método de verificación eliminado. El valor predeterminado es `A verification method was removed from your account`.
`MAILER_TEMPLATES_INVITE` - `string`
Ruta de URL a una plantilla de correo electrónico para usar al invitar a un usuario. (p. ej. `https://www.example.com/path-to-email-template.html`)
Las variables `SiteURL`, `Email` y `ConfirmationURL` están disponibles.
Contenido predeterminado (si la plantilla no está disponible):```html
<h2>You've been invited</h2>
<p>You've been invited to create an account. Follow the link below to accept.</p>
<p><a href="{{ .ConfirmationURL }}">Accept invitation</a></p>
MAILER_TEMPLATES_CONFIRMATION - string
Ruta URL a una plantilla de correo electrónico para usar al confirmar un registro. (p. ej. https://www.example.com/path-to-email-template.html)
Las variables SiteURL, Email y ConfirmationURL están disponibles.
Contenido predeterminado (si la plantilla no está disponible):```html
Follow the link below to confirm this email address and finish signing up.
``` `MAILER_TEMPLATES_RECOVERY` - `string`Ruta URL a una plantilla de correo electrónico para usar al restablecer una contraseña. (p. ej., https://www.example.com/path-to-email-template.html)
Las variables SiteURL, Email y ConfirmationURL están disponibles.
Contenido predeterminado (si la plantilla no está disponible):```html
We received a request to reset your password. Follow the link below to choose a new one.
If you didn't request this, you can safely ignore this email.
``` `MAILER_TEMPLATES_MAGIC_LINK` - `string`Ruta de URL a una plantilla de correo electrónico para usar al enviar el enlace mágico. (p. ej. https://www.example.com/path-to-email-template.html)
Las variables SiteURL, Email y ConfirmationURL están disponibles.
Contenido predeterminado (si la plantilla no está disponible):```html
Follow the link below to sign in. This link expires shortly and can only be used once.
``` `MAILER_TEMPLATES_EMAIL_CHANGE` - `string`Ruta URL a una plantilla de correo electrónico para usar al confirmar el cambio de una dirección de correo electrónico. (p. ej. https://www.example.com/path-to-email-template.html)
Las variables SiteURL, Email, NewEmail y ConfirmationURL están disponibles.
Contenido predeterminado (si la plantilla no está disponible):```html
Follow the link below to confirm {{ .NewEmail }} as your new email address.
If you didn't request this change, you can safely ignore this email.
``` `MAILER_TEMPLATES_REAUTHENTICATION` - `string`Ruta de URL a una plantilla de correo electrónico para usar al reautenticar a un usuario. (p. ej. https://www.example.com/path-to-email-template.html)
La variable Token está disponible.
Contenido predeterminado (si la plantilla no está disponible):```html
Use the code below to verify your identity. It expires shortly.
{{ .Token }}
``` `MAILER_TEMPLATES_PASSWORD_CHANGED_NOTIFICATION` - `string`Ruta URL a una plantilla de correo electrónico para usar al notificar a un usuario que su contraseña ha sido cambiada. (p. ej. https://www.example.com/path-to-email-template.html)
Las variables Email están disponibles.
Contenido predeterminado (si la plantilla no está disponible):```html
The password for your account was recently changed.
If you didn't make this change, reset your password and contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_PASSWORD_CHANGED_ENABLED` - `bool`Si se debe enviar un correo de notificación cuando se cambia la contraseña de un usuario. El valor por defecto es false.
MAILER_TEMPLATES_EMAIL_CHANGED_NOTIFICATION - string
Ruta URL a una plantilla de correo para usar al notificar a un usuario que su correo ha sido cambiado. (p. ej., https://www.example.com/path-to-email-template.html)
Las variables Email y OldEmail están disponibles.
Contenido por defecto (si la plantilla no está disponible):```html
The email address for your account was changed from {{ .OldEmail }} to {{ .Email }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_EMAIL_CHANGED_ENABLED` - `bool`Si enviar un correo de notificación cuando se cambia el correo electrónico de un usuario. El valor predeterminado es false.
GOTRUE_MAILER_TEMPLATES_PHONE_CHANGED_NOTIFICATION - string
Ruta URL a una plantilla de correo electrónico para usar al notificar a un usuario que su número de teléfono ha sido cambiado. (p. ej. https://www.example.com/path-to-email-template.html)
Las variables Email, Phone y OldPhone están disponibles.
Contenido predeterminado (si la plantilla no está disponible):```html
The phone number for your account was changed from {{ .OldPhone }} to {{ .Phone }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_PHONE_CHANGED_ENABLED` - `bool`Indica si se debe enviar un correo de notificación cuando se cambia el número de teléfono de un usuario. El valor predeterminado es false.
GOTRUE_MAILER_TEMPLATES_IDENTITY_LINKED_NOTIFICATION - string
Ruta URL a una plantilla de correo para usar al notificar a un usuario que un método de inicio de sesión ha sido vinculado a su cuenta. (p. ej. https://www.example.com/path-to-email-template.html)
Las variables Email y Provider están disponibles.
Contenido predeterminado (si la plantilla no está disponible):```html
Your {{ .Provider }} account was linked as a new sign-in method for {{ .Email }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_IDENTITY_LINKED_ENABLED` - `bool`Si se debe enviar un correo de notificación cuando un método de inicio de sesión se vincula a la cuenta de un usuario. El valor predeterminado es false.
GOTRUE_MAILER_TEMPLATES_IDENTITY_UNLINKED_NOTIFICATION - string
Ruta de URL a una plantilla de correo electrónico que se usará al notificar a un usuario que se ha eliminado un método de inicio de sesión de su cuenta. (p. ej. https://www.example.com/path-to-email-template.html)
Las variables Email y Provider están disponibles.
Contenido predeterminado (si la plantilla no está disponible):```html
Your {{ .Provider }} account was removed as a sign-in method for {{ .Email }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_IDENTITY_UNLINKED_ENABLED` - `bool`Si se debe enviar un correo de notificación cuando se elimina un método de inicio de sesión de la cuenta de un usuario. El valor predeterminado es false.
GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_ENROLLED_NOTIFICATION - string
Ruta URL de una plantilla de correo electrónico que se utilizará al notificar a un usuario que se ha añadido un nuevo método de verificación a su cuenta. (p. ej. https://www.example.com/path-to-email-template.html)
Las variables Email y FactorType están disponibles.
Contenido predeterminado (si la plantilla no está disponible):```html
Sign-in verification method {{ .FactorType }} was added to your account.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_MFA_FACTOR_ENROLLED_ENABLED` - `bool`Si se debe enviar un correo de notificación cuando se añade un nuevo método de verificación a la cuenta de un usuario. Por defecto es false.
GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_UNENROLLED_NOTIFICATION - string
Ruta URL a una plantilla de correo para usar al notificar a un usuario que se ha eliminado un método de verificación de su cuenta. (p. ej. https://www.example.com/path-to-email-template.html)
Las variables Email y FactorType están disponibles.
Contenido por defecto (si la plantilla no está disponible):```html
Sign-in verification method {{ .FactorType }} was removed from your account.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_MFA_FACTOR_UNENROLLED_ENABLED` - `bool`Indica si se debe enviar un correo de notificación cuando se elimina un método de verificación de la cuenta de un usuario. Por defecto es false.
SMS_AUTOCONFIRM - bool
Si no necesitas confirmación telefónica, puedes establecer esto en true. Por defecto es false.
SMS_MAX_FREQUENCY - number
Controla la cantidad mínima de tiempo que debe transcurrir antes de enviar otro SMS OTP. El valor es el número de segundos. Por defecto es 60 (1 minuto).
SMS_OTP_EXP - number
Controla la duración durante la cual un SMS OTP es válido.
SMS_OTP_LENGTH - number
Controla el número de dígitos del SMS OTP enviado.
SMS_PROVIDER - string
Las opciones disponibles son: twilio, messagebird, textlocal y vonage
Luego puedes usar tus credenciales de twilio:
SMS_TWILIO_ACCOUNT_SIDSMS_TWILIO_AUTH_TOKENSMS_TWILIO_MESSAGE_SERVICE_SID - puede configurarse con tu número móvil remitente de twilioO las credenciales de Messagebird, que se pueden obtener en el Dashboard:
SMS_MESSAGEBIRD_ACCESS_KEY - tu clave de acceso de MessagebirdSMS_MESSAGEBIRD_ORIGINATOR - remitente de SMS (tu número de teléfono de Messagebird con + o nombre de empresa)captcha_token y hará una solicitud de verificación al proveedor de CAPTCHA.SECURITY_CAPTCHA_ENABLED - string
Indica si el middleware de captcha está habilitado
SECURITY_CAPTCHA_PROVIDER - string
Por ahora, las únicas opciones compatibles son: hCaptcha y Turnstile
SECURITY_CAPTCHA_SECRET - stringSECURITY_CAPTCHA_TIMEOUT - stringObtenlos desde la cuenta de hcaptcha o turnstile
SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION - bool
Exigir reautenticación al actualizar la contraseña.
GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED - bool
Usa esto para habilitar/deshabilitar los inicios de sesión anónimos.
GOTRUE_SECURITY_SB_FORWARDED_FOR_ENABLED - bool
Habilita el reenvío de direcciones IP mediante la cabecera de solicitud HTTP Sb-Forwarded-For. Cuando está habilitado, Auth analizará el primer valor de esta cabecera como una dirección IP y lo usará para el seguimiento de direcciones IP y la limitación de velocidad. Asegúrate de que esta cabecera sea totalmente confiable antes de habilitar esta función, pasándola únicamente desde clientes o proxies confiables.
Auth expone los siguientes endpoints:
Devuelve la configuración disponible públicamente para esta instancia de auth.```json { "external": { "apple": true, "azure": true, "bitbucket": true, "discord": true, "facebook": true, "figma": true, "github": true, "gitlab": true, "google": true, "keycloak": true, "linkedin": true, "notion": true, "slack": true, "snapchat": true, "spotify": true, "twitch": true, "twitter": true, "workos": true }, "disable_signup": false, "autoconfirm": false }
### **POST, PUT /admin/users/<user_id>**
Crea (POST) o actualiza (PUT) el usuario según el `user_id` especificado. El campo `ban_duration` acepta las siguientes unidades de tiempo: "ns", "us", "ms", "s", "m", "h". Consulte [`time.ParseDuration`](https://pkg.go.dev/time#ParseDuration) para obtener más detalles sobre el formato utilizado.```js
headers:
{
"Authorization": "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" // requires a role claim that can be set in the GOTRUE_JWT_ADMIN_ROLES env var
}
body:
{
"role": "test-user",
"email": "[email protected]",
"phone": "12345678",
"password": "secret", // only if type = signup
"email_confirm": true,
"phone_confirm": true,
"user_metadata": {},
"app_metadata": {},
"ban_duration": "24h" or "none" // to unban a user
}
Devuelve el enlace de acción de correo electrónico correspondiente según el tipo especificado. Entre otras cosas, la respuesta también contiene los parámetros de consulta del enlace de acción como campos JSON separados por conveniencia (junto con el OTP de correo electrónico a partir del cual se genera el token correspondiente).```js headers: { "Authorization": "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" // admin role required }
body: { "type": "signup" or "magiclink" or "recovery" or "invite" or "email_change_current" or "email_change_new", "email": "[email protected]", "password": "secret", // only if type = signup "data": { ... }, // only if type = signup "redirect_to": "https://supabase.io" // Redirect URL to send the user to after an email action. Defaults to SITE_URL.
}
Devuelve```js
{
"action_link": "http://localhost:9999/verify?token=TOKEN&type=TYPE&redirect_to=REDIRECT_URL",
"email_otp": "EMAIL_OTP",
"hashed_token": "TOKEN",
"verification_type": "TYPE",
"redirect_to": "REDIRECT_URL",
...
}
Registra un nuevo usuario con un correo electrónico y una contraseña.```json { "email": "[email protected]", "password": "secret" }
devuelve:```js
{
"id": "11111111-2222-3333-4444-5555555555555",
"email": "[email protected]",
"confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"created_at": "2016-05-15T19:53:12.368652374-07:00",
"updated_at": "2016-05-15T19:53:12.368652374-07:00"
}
// if sign up is a duplicate then faux data will be returned
// as to not leak information about whether a given email
// has an account with your service or not
Registrar un nuevo usuario con un número de teléfono y contraseña.```js { "phone": "12345678", // follows the E.164 format "password": "secret" }
Devuelve:```js
{
"id": "11111111-2222-3333-4444-5555555555555", // if duplicate sign up, this ID will be faux
"phone": "12345678",
"confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"created_at": "2016-05-15T19:53:12.368652374-07:00",
"updated_at": "2016-05-15T19:53:12.368652374-07:00"
}
si AUTOCONFIRM está habilitado y el registro es un duplicado, entonces el endpoint devolverá:```json { "code": 400, "msg": "User already registered" }
### **POST /resend**
Permite a un usuario reenviar un OTP existente de signup, sms, email_change o phone_change.```json
{
"email": "[email protected]",
"type": "signup"
}
The input chunk is empty — no content was provided for chunk 73. Please supply the text to translate.```json { "phone": "12345678", "type": "sms" }
returns:```json
{
"message_id": "msgid123456"
}
Invita a un nuevo usuario con un correo electrónico.
Este endpoint requiere el JWT service_role o supabase_admin configurado como encabezado Auth Bearer:
p. ej.```js headers: { "Authorization" : "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" }
No se recibió contenido para traducir. El campo INPUT está vacío.```json
{
"email": "[email protected]"
}
Devuelve:```json { "id": "11111111-2222-3333-4444-5555555555555", "email": "[email protected]", "confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00", "created_at": "2016-05-15T19:53:12.368652374-07:00", "updated_at": "2016-05-15T19:53:12.368652374-07:00", "invited_at": "2016-05-15T19:53:12.368652374-07:00" }
### **POST /verify**
Verifica un registro o una recuperación de contraseña. Type puede ser `signup`, `recovery`, `invite`, `magiclink`, `email_change`, `sms` o `phone_change`
y el `token` es un token devuelto por `/signup` o `/recover`.```json
{
"type": "signup",
"token": "confirmation-code-delivered-in-email"
}
password es obligatorio para la verificación de registro si no existe una contraseña existente.
Devuelve:```json { "access_token": "jwt-token-representing-the-user", "token_type": "bearer", "expires_in": 3600, "refresh_token": "a-refresh-token", "type": "signup | recovery | invite | magiclink | email_change | sms | phone_change" }
Verifica un registro telefónico o un OTP por SMS. El tipo debe establecerse en `sms`.```json
{
"type": "sms",
"token": "confirmation-otp-delivered-in-sms",
"redirect_to": "https://supabase.io",
"phone": "phone-number-sms-otp-was-delivered-to"
}
Devuelve:```json { "access_token": "jwt-token-representing-the-user", "token_type": "bearer", "expires_in": 3600, "refresh_token": "a-refresh-token" }
### **GET /verify**
Verifica un registro o una recuperación de contraseña. El tipo puede ser `signup`, `recovery`, `magiclink`, `invite` o `email_change`, y el `token` es un token devuelto por `/signup`, `/recover` o `/magiclink`.
Parámetros de consulta:```json
{
"type": "signup",
"token": "confirmation-code-delivered-in-email",
"redirect_to": "https://supabase.io"
}
El usuario iniciará sesión y será redirigido a:``` SITE_URL/#access_token=jwt-token-representing-the-user&token_type=bearer&expires_in=3600&refresh_token=a-refresh-token&type=invite
Su aplicación debe detectar los parámetros de consulta en el fragmento y usarlos para establecer la sesión (supabase-js hace esto automáticamente)
Puede usar el parámetro `type` para redirigir al usuario a un formulario de establecimiento de contraseña en el caso de `invite` o `recovery`,
o mostrar un mensaje de cuenta confirmada/bienvenida en el caso de `signup`, o dirigirlos a algún flujo de incorporación adicional
### **POST /otp**
Contraseña de un solo uso. Entregará un enlace mágico o un OTP por SMS al usuario dependiendo de si el cuerpo de la solicitud contiene una clave "email" o "phone".
Si `"create_user": true`, el usuario no se registrará automáticamente si el usuario no existe.```js
{
"phone": "12345678" // follows the E.164 format
"create_user": true
}
O```js // exactly the same as /magiclink { "email": "[email protected]" "create_user": true }
Devuelve:```json
{}
Magic Link. Entregará un enlace (p. ej. /verify?type=magiclink&token=fgtyuf68ddqdaDd) al usuario basado en la dirección de correo electrónico, que pueden usar para canjear un access_token.
Por defecto, los Magic Links solo se pueden enviar una vez cada 60 segundos.```json { "email": "[email protected]" }
Devuelve:```json
{}
Al hacer clic en el enlace mágico, redirigirá a <SITE_URL>#access_token=x&refresh_token=y&expires_in=z&token_type=bearer&type=magiclink (ver /verify más arriba)
Recuperación de contraseña. Enviará un correo de recuperación de contraseña al usuario en función de la dirección de correo electrónico.
Por defecto, los enlaces de recuperación solo se pueden enviar una vez cada 60 segundos```json { "email": "[email protected]" }
Devuelve:```json
{}
Este es un endpoint OAuth2 que actualmente implementa los tipos de concesión password y refresh_token
parámetros de consulta:``` ?grant_type=password
body:```js
// Email login
{
"email": "[email protected]",
"password": "somepassword"
}
// Phone login
{
"phone": "12345678",
"password": "somepassword"
}
o
parámetros de consulta:``` grant_type=refresh_token
body:```json
{
"refresh_token": "a-refresh-token"
}
Una vez que tengas un token de acceso, puedes acceder a los métodos que requieren autenticación configurando la cabecera Authorization: Bearer YOUR_ACCESS_TOKEN_HERE.
Devuelve:```json { "access_token": "jwt-token-representing-the-user", "token_type": "bearer", "expires_in": 3600, "refresh_token": "a-refresh-token" }
### **GET /user**
Obtén el objeto JSON del usuario con sesión iniciada (requiere autenticación)
Devuelve:```json
{
"id": "11111111-2222-3333-4444-5555555555555",
"email": "[email protected]",
"confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"created_at": "2016-05-15T19:53:12.368652374-07:00",
"updated_at": "2016-05-15T19:53:12.368652374-07:00"
}
Actualizar un usuario (requiere autenticación). Además de cambiar el correo electrónico/contraseña, este método se puede utilizar para establecer datos personalizados del usuario. Cambiar el correo electrónico dará como resultado el envío de un enlace mágico.```json { "email": "[email protected]", "password": "new-password", "phone": "+123456789", "data": { "key": "value", "number": 10, "admin": false } }
Devuelve:```json
{
"id": "11111111-2222-3333-4444-5555555555555",
"email": "[email protected]",
"email_change_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"phone": "+123456789",
"phone_change_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"created_at": "2016-05-15T19:53:12.368652374-07:00",
"updated_at": "2016-05-15T19:53:12.368652374-07:00"
}
Si GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION está habilitado, el usuario deberá reautenticarse primero.```json
{
"password": "new-password",
"nonce": "123456"
}
### **GET /reauthenticate**
Envía un nonce al correo electrónico (preferido) o teléfono del usuario. Este endpoint requiere que el usuario haya iniciado sesión / esté autenticado primero. El usuario necesita tener un correo electrónico o número de teléfono para que el nonce se envíe correctamente.```js
headers: {
"Authorization" : "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO"
}
Cierra la sesión de un usuario (Requiere autenticación).
Esto revocará todos los refresh tokens del usuario. Recuerda que los tokens JWT seguirán siendo válidos para la autenticación sin estado hasta que expiren.
Obtén el access_token del proveedor OAuth externo
parámetros de consulta:``` provider=apple | azure | bitbucket | discord | facebook | figma | github | gitlab | google | keycloak | linkedin | notion | slack | snapchat | spotify | twitch | twitter | workos
scopes=<optional additional scopes depending on the provider (email and name are requested by default)>
Redirects to provider and then to `/callback`
For Apple-specific setup see: <https://github.com/supabase/auth#apple-oauth>
### **GET /callback**
External provider should redirect to this endpoint
Redirects to `<GOTRUE_SITE_URL>#access_token=<access_token>&refresh_token=<refresh_token>&provider_token=<provider_oauth_token>&expires_in=3600&provider=<provider_name>`
If additional scopes were requested then `provider_token` will be populated, you can use this to fetch additional data from the provider or interact with their services
twitterworkos