> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Opciones de configuración del comportamiento disponibles en Lock.Swift

# Lock.swift: Opciones de configuración

A continuación se enumeran numerosas opciones para configurar el comportamiento de Lock. Además, en la página [Opciones de personalización de estilo](/es/docs/libraries/lock-swift/lock-swift-customization) también encontrarás varias opciones para modificar la apariencia y el estilo de Lock.

<div id="configuring-locks-behavior">
  ## Configuración del comportamiento de Lock
</div>

Puedes añadir opciones de configuración a la inicialización de Lock mediante `withOptions`.

```swift lines theme={null}
Lock
  .classic()
  .withOptions {
    $0.closable = true
    $0.usernameStyle = [.Username]
    $0.allow = [.Login, .ResetPassword]
  }
  .present(from: self)
```

<div id="behavior-options">
  ## Opciones de comportamiento
</div>

<div id="closable">
  ### closable
</div>

Permite que el usuario cierre Lock. De forma predeterminada, es `false`.

```swift lines theme={null}
.withOptions {
  $0.closable = true
}
```

<div id="scope">
  ### scope
</div>

Scope utilizado para la autenticación. Su valor predeterminado es `openid`. Devolverá no solo el **<Tooltip tip="Token de acceso: Credencial de autorización, en forma de una cadena opaca o JWT, utilizada para acceder a una API." cta="Ver glosario" href="/es/docs/glossary?term=Access+Token">Token de acceso</Tooltip>**, sino también un **<Tooltip tip="ID Token: Credencial destinada al propio cliente, en lugar de para acceder a un recurso." cta="Ver glosario" href="/es/docs/glossary?term=ID+Token">ID Token</Tooltip>**, que es un <Tooltip tip="ID Token: Credencial destinada al propio cliente, en lugar de para acceder a un recurso." cta="Ver glosario" href="/es/docs/glossary?term=JSON+Web+Token">JSON Web Token</Tooltip> (JWT) que contiene información del usuario. Consulte la documentación sobre [Scopes](/es/docs/get-started/apis/scopes) para obtener más información sobre los alcances de autenticación.

```swift lines theme={null}
.withOptions {
  $0.scope = "openid name email picture"
}
```

<div id="refresh-tokens">
  #### Tokens de actualización
</div>

Especificar el scope `offline_access` en las opciones de Lock permitirá devolver un [Token de actualización](/es/docs/secure/tokens/refresh-tokens) junto con el access\_token y el id\_token. <Tooltip tip="Token de actualización: token que se usa para obtener un Token de acceso renovado sin obligar a los usuarios a volver a iniciar sesión." cta="Ver glosario" href="/es/docs/glossary?term=Refresh+Tokens">Tokens de actualización</Tooltip> se pueden guardar y usar para obtener un nuevo Token de acceso cuando el anterior caduque. Para obtener más información sobre el uso de Tokens de actualización en la autenticación de Auth0, consulta la documentación de referencia del [SDK de Auth0.Swift](/es/docs/libraries/auth0-swift), que usarías para implementar Tokens de actualización, o la [guía de inicio rápido de Swift](/es/docs/quickstart/native/ios-swift), que ofrece un ejemplo completo del uso de Auth0 en el desarrollo con Swift, incluida la gestión de Tokens de actualización.

<div id="termsofservice">
  ### termsOfService
</div>

De forma predeterminada, Lock usará los Términos del servicio y la Política de privacidad de Auth0, pero puedes indicar otras URL para enlazar a otros términos y políticas.

```swift lines theme={null}
.withOptions {
  $0.termsOfService = "https://mycompany.com/terms"
  $0.privacyPolicy = "https://mycompany.com/privacy"
}
```

<div id="show-terms-of-service">
  ### Mostrar los Términos del servicio
</div>

Las conexiones de base de datos muestran el cuadro de diálogo de los Términos del servicio. El valor predeterminado es `true`. Ten en cuenta que los Términos del servicio siempre se mostrarán si la marca `mustAcceptTerms` está habilitada.

```swift lines theme={null}
.withOptions {
    $0.showTerms = true
}
```

<div id="require-users-to-accept-the-terms-of-service">
  ### Exigir que los usuarios acepten los Términos del servicio
</div>

Las conexiones de base de datos requieren la aceptación explícita de los Términos del servicio.

```swift lines theme={null}
.withOptions {
    $0.mustAcceptTerms = true
}
```

<div id="web-authentication-options">
  ## Opciones de autenticación web
</div>

<div id="leeway">
  ### leeway
</div>

Margen de desfase horario usado para la validación del token de ID. Amplía el intervalo de tiempo durante el cual el token de ID seguirá considerándose válido, para tener en cuenta la diferencia entre la hora del servidor y la del cliente. De forma predeterminada, es de **60000 milisegundos** (60 segundos).

```swift lines theme={null}
.withOptions {
  $0.leeway = 30000 // 30 segundos
}
```

<div id="maxage">
  ### maxAge
</div>

Tiempo transcurrido máximo permitido (en milisegundos) desde la última vez que el usuario se autenticó. Se usa para validar el token de ID. Si se establece, el token de ID incluirá una reclamación `auth_time` con la marca de tiempo de la autenticación. El valor predeterminado es `nil`.

```swift lines theme={null}
.withOptions {
  $0.maxAge = 86400000 // 1 día
}
```

<div id="database-options">
  ## Opciones de base de datos
</div>

<div id="allow">
  ### allow
</div>

Qué pantallas de base de datos estarán accesibles; de forma predeterminada, se habilitan todas las pantallas, como `.Login`, `.Signup` y `.ResetPassword`.

```swift lines theme={null}
.withOptions {
  $0.allow = [.Login, .ResetPassword]
}
```

<div id="initialscreen">
  ### initialScreen
</div>

La primera pantalla que se muestra al usuario. El valor predeterminado es `.Login`; otras opciones incluyen `.Signup` y `ResetPassword`.

```swift lines theme={null}
.withOptions {
  $0.initialScreen = .Login
}
```

<div id="usernamestyle">
  ### usernameStyle
</div>

Especifique el tipo de identificador que requerirá el inicio de sesión. El valor predeterminado es `[.Username, .Email]`, pero también puede ser `[.Username]` o `[.Email]`. Sin embargo, es importante tener en cuenta que esta opción solo está activa si ha establecido la marca `requires_username` en `true` en su [Auth0 Dashboard](https://manage.auth0.com/#/).

```swift lines theme={null}
.withOptions {
  $0.usernameStyle = [.Username]
}
```

<div id="custom-signup-fields">
  #### Campos personalizados de registro
</div>

Al registrarse, la información obligatoria predeterminada es el correo electrónico y la contraseña del usuario. Puede ampliar los datos que recopila según sea necesario. Los campos adicionales de registro que agregue aquí se almacenarán en `user_metadata`; puede obtener más información en [Metadatos](/es/docs/manage-users/user-accounts/metadata). Tenga en cuenta que debe especificar el icono que se usará con su campo de texto personalizado.

```swift lines theme={null}
.withOptions {
  $0.customSignupFields = [
    CustomTextField(name: "first_name", placeholder: "First Name", icon: LazyImage(name: "ic_person", bundle: Lock.bundle)),
    CustomTextField(name: "last_name", placeholder: "Last Name", icon: LazyImage(name: "ic_person", bundle: Lock.bundle))
  ]
}
```

También puede especificar iconos de otros bundles, como en el siguiente ejemplo:
CustomTextField(name: "slack\_handle", placeholder: "Usuario de Slack", icon: LazyImage(name: "ic\_slack", bundle: Bundle(identifier: "CustomBundle")))

<div id="enterprise-options">
  ## Opciones empresariales
</div>

También hay opciones de configuración específicas para las conexiones empresariales:

<div id="enterpriseconnectionusingactiveauth">
  ### enterpriseConnectionUsingActiveAuth
</div>

De forma predeterminada, las conexiones empresariales usarán autenticación web. Sin embargo, puede especificar qué conexiones usarán en su lugar la autenticación con credenciales y solicitarán un username y una contraseña.

```swift lines theme={null}
.withOptions {
  $0.enterpriseConnectionUsingActiveAuth = ["enterprisedomain.com"]
}
```

<div id="activedirectoryemailasusername">
  ### activeDirectoryEmailAsUsername
</div>

En el modo de autenticación con credenciales, ¿se debe exigir al usuario que use su correo electrónico como identificador? El valor predeterminado es `false`; en ese caso, se requiere un username.

```swift lines theme={null}
.withOptions {
  $0.activeDirectoryEmailAsUsername = true
}
```

<div id="logging-options">
  ## Opciones de registro
</div>

Lock ofrece opciones para activar y desactivar fácilmente el registro, así como para ajustar otras opciones relacionadas.

<div id="loglevel">
  ### logLevel
</div>

De forma predeterminada, es `.off`; admite los niveles de registro de Syslog.

```swift lines theme={null}
.withOptions {
  $0.logLevel = .all
}
```

<div id="loghttprequest">
  ### logHttpRequest
</div>

Indica si se registran las solicitudes a la API de Auth0.swift. De forma predeterminada, es `false`.

```swift lines theme={null}
.withOptions {
  $0.logHttpRequest = true
}
```

<div id="loggeroutput">
  ### loggerOutput
</div>

Especifique el controlador de salida del logger; de forma predeterminada, se usa la instrucción `print`.

```swift lines theme={null}
.withOptions {
  $0.loggerOutput = CleanroomLockLogger()
}
```

En el código anterior, loggerOutput se ha configurado para usar [CleanroomLogger](https://github.com/emaloney/CleanroomLogger). Normalmente, esto se consigue implementando el protocolo loggerOutput. Por supuesto, puedes usar la biblioteca de logging que prefieras. A continuación, se muestra un ejemplo de uso para gestionar la salida de registro con CleanroomLogger.

```swift lines theme={null}
class CleanroomLockLogger: LoggerOutput {
  func message(_ message: String, level: LoggerLevel, filename: String, line: Int) {
    let channel: LogChannel?
    switch level {
    case .debug:
        channel = Log.debug
    case .error:
        channel = Log.error
    case .info:
        channel = Log.info
    case .verbose:
        channel = Log.verbose
    case .warn:
        channel = Log.warning
    default:
        channel = nil
    }
    channel?.message(message, filePath: filename, fileLine: line)
  }
}
```
