> ## 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.

> Describe las diferentes formas de restablecer las contraseñas de los usuarios de tus aplicaciones de Auth0.

# Cambiar las contraseñas de los usuarios

export const AuthCodeGroup = ({children, dropdown}) => {
  const [processedChildren, setProcessedChildren] = useState(children);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      unsubscribe = window.autorun(() => {
        const processChildren = node => {
          if (typeof node === "string") {
            let processedNode = node;
            for (const [key, value] of window.rootStore.variableStore.values.entries()) {
              const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
              processedNode = processedNode.replaceAll(new RegExp(escapedKey, "g"), value);
            }
            return processedNode;
          } else if (Array.isArray(node)) {
            return node.map(processChildren);
          } else if (node && node.props && node.props.children) {
            return {
              ...node,
              props: {
                ...node.props,
                children: processChildren(node.props.children)
              }
            };
          }
          return node;
        };
        setProcessedChildren(processChildren(children));
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  return <CodeGroup dropdown={dropdown}>{processedChildren}</CodeGroup>;
};

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****ENMASCARADO*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

<Card title="Descripción general">
  Conceptos clave

  * Inicia un restablecimiento de contraseña con Auth0 Dashboard o la Management API.
</Card>

En este tema se describen distintas formas de restablecer la contraseña de un usuario de tu base de datos. Solo puedes cambiar contraseñas de usuarios en tus [conexiones de base de datos](/es/docs/authenticate/database-connections). Los usuarios que inician sesión con conexiones [sociales](/es/docs/authenticate/identity-providers/social-identity-providers) o [empresariales](/es/docs/authenticate/identity-providers/enterprise-identity-providers) deben restablecer sus contraseñas con el <Tooltip tip="Proveedor de identidad (IdP): servicio que almacena y administra identidades digitales." cta="Ver glosario" href="/es/docs/glossary?term=identity+provider">proveedor de identidad</Tooltip> (como Google o Facebook), y las siguientes instrucciones solo funcionan si se conoce el correo electrónico del usuario.

Hay dos métodos básicos para cambiar la contraseña de un usuario:

* [Iniciar un flujo interactivo de restablecimiento de contraseña](#trigger-an-interactive-password-reset-flow) que envía al usuario un enlace por correo electrónico. El enlace abre la página de restablecimiento de contraseña de Auth0, donde el usuario puede introducir una nueva contraseña.
* [Establecer directamente la nueva contraseña](#directly-set-the-new-password) mediante la <Tooltip tip="Management API: un producto que permite a los clientes realizar tareas administrativas." cta="Ver glosario" href="/es/docs/glossary?term=Management+API">Management API</Tooltip> o el <Tooltip tip="Management API: un producto que permite a los clientes realizar tareas administrativas." cta="Ver glosario" href="/es/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip>.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Restablecer la contraseña de un usuario hace que su sesión caduque.
</Callout>

<Card title="¿No es lo que buscas?">
  * Para configurar la página personalizada de restablecimiento de contraseña, consulta [Customize Password Reset Page](/es/docs/customize/login-pages/classic-login/customize-password-reset-page).
  * Para implementar un comportamiento personalizado después de cambiar correctamente la contraseña, consulta [Actions Triggers: post-change-password](/es/docs/customize/actions/explore-triggers/password-reset-triggers/post-change-password-trigger).
  * Para restablecer la contraseña de tu cuenta personal de Auth0, consulta [Reset Account Passwords](/es/docs/troubleshoot/customer-support/reset-account-passwords).
</Card>

<div id="trigger-an-interactive-password-reset-flow">
  ## Iniciar un flujo interactivo de restablecimiento de contraseña
</div>

Hay dos formas de iniciar un flujo interactivo de restablecimiento de contraseña, según su caso de uso: mediante la página de <Tooltip tip="Universal Login: su aplicación redirige a Universal Login, alojado en el Servidor de autorización de Auth0, para verificar la identidad del usuario." cta="Ver glosario" href="/es/docs/glossary?term=Universal+Login">Universal Login</Tooltip> o la Authentication API.

<div id="universal-login-page">
  ### Página de Universal Login
</div>

Si su aplicación usa Universal Login, el usuario puede usar el widget Lock en la pantalla de inicio de sesión para iniciar el envío de un correo electrónico de restablecimiento de contraseña. Con Universal Login, el usuario puede hacer clic en el enlace **¿No recuerda su contraseña?** y luego ingresar su correo electrónico. Esto envía una solicitud POST a Auth0 que inicia el proceso de restablecimiento de contraseña. El usuario [recibe un correo electrónico de restablecimiento de contraseña](#password-reset-email).

<div id="authentication-api">
  ### Authentication API
</div>

Si su aplicación usa un flujo interactivo de restablecimiento de contraseña mediante la Authentication API, realice una solicitud `POST`. En el campo `email`, proporcione la dirección de correo electrónico del usuario que necesita cambiar su contraseña. Si la solicitud se realiza correctamente, el usuario [recibe un correo electrónico de restablecimiento de contraseña](#password-reset-email).

Si llama a la API desde el navegador, asegúrese de que la URL de origen esté permitida:

Vaya a [Auth0 Dashboard > Applications > Applications](https://manage.auth0.com/#/applications/\{yourClientId}/settings) y agregue la URL a la lista de **Allowed Origins (CORS)**.

Si su conexión es una base de datos personalizada, compruebe si el usuario existe en la base de datos antes de invocar la Authentication API para `changePassword`.

<AuthCodeGroup>
  ```bash cURL theme={null}
  curl --request POST \
    --url 'https://{yourDomain}/dbconnections/change_password' \
    --header 'content-type: application/json' \
    --data '{"client_id": "{yourClientId}","email": "","connection": "Username-Password-Authentication"}'
  ```

  ```csharp C# theme={null}
  var client = new RestClient("https://{yourDomain}/dbconnections/change_password");
  var request = new RestRequest(Method.POST);
  request.AddHeader("content-type", "application/json");
  request.AddParameter("application/json", "{"client_id": "{yourClientId}","email": "","connection": "Username-Password-Authentication"}", ParameterType.RequestBody);
  IRestResponse response = client.Execute(request);
  ```

  ```go Go theme={null}
  package main

  import (
  	"fmt"
  	"strings"
  	"net/http"
  	"io/ioutil"
  )

  func main() {

  	url := "https://{yourDomain}/dbconnections/change_password"

  	payload := strings.NewReader("{"client_id": "{yourClientId}","email": "","connection": "Username-Password-Authentication"}")

  	req, _ := http.NewRequest("POST", url, payload)

  	req.Header.Add("content-type", "application/json")

  	res, _ := http.DefaultClient.Do(req)

  	defer res.Body.Close()
  	body, _ := ioutil.ReadAll(res.Body)

  	fmt.Println(res)
  	fmt.Println(string(body))

  }
  ```

  ```java Java theme={null}
  HttpResponse<String> response = Unirest.post("https://{yourDomain}/dbconnections/change_password")
    .header("content-type", "application/json")
    .body("{"client_id": "{yourClientId}","email": "","connection": "Username-Password-Authentication"}")
    .asString();
  ```

  ```javascript Node.JS theme={null}
  var axios = require("axios").default;

  var options = {
    method: 'POST',
    url: 'https://{yourDomain}/dbconnections/change_password',
    headers: {'content-type': 'application/json'},
    data: {
      client_id: '{yourClientId}',
      email: '',
      connection: 'Username-Password-Authentication'
    }
  };

  axios.request(options).then(function (response) {
    console.log(response.data);
  }).catch(function (error) {
    console.error(error);
  });
  ```

  ```php PHP theme={null}
  $curl = curl_init();

  curl_setopt_array($curl, [
    CURLOPT_URL => "https://{yourDomain}/dbconnections/change_password",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "{"client_id": "{yourClientId}","email": "","connection": "Username-Password-Authentication"}",
    CURLOPT_HTTPHEADER => [
      "content-type: application/json"
    ],
  ]);

  $response = curl_exec($curl);
  $err = curl_error($curl);

  curl_close($curl);

  if ($err) {
    echo "cURL Error #:" . $err;
  } else {
    echo $response;
  }
  ```

  ```python Python theme={null}
  import http.client

  conn = http.client.HTTPSConnection("")

  payload = "{"client_id": "{yourClientId}","email": "","connection": "Username-Password-Authentication"}"

  headers = { 'content-type': "application/json" }

  conn.request("POST", "/{yourDomain}/dbconnections/change_password", payload, headers)

  res = conn.getresponse()
  data = res.read()

  print(data.decode("utf-8"))
  ```

  ```ruby Ruby theme={null}
  require 'uri'
  require 'net/http'
  require 'openssl'

  url = URI("https://{yourDomain}/dbconnections/change_password")

  http = Net::HTTP.new(url.host, url.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  request = Net::HTTP::Post.new(url)
  request["content-type"] = 'application/json'
  request.body = "{"client_id": "{yourClientId}","email": "","connection": "Username-Password-Authentication"}"

  response = http.request(request)
  puts response.read_body
  ```
</AuthCodeGroup>

<div id="password-reset-email">
  ### Correo electrónico de restablecimiento de contraseña
</div>

Independientemente de cómo se haya iniciado el proceso de restablecimiento de contraseña, el usuario recibe un correo electrónico con un enlace para restablecer su contraseña.

<Frame>
  <img src="https://mintcdn.com/translations/MV7tE-x71x8RWRES/docs/images/cdy7uua7fh8z/5IBhcrCJ7XXI6OgQOnHMJa/33cdafbfe7a63a48cfaa2e58a12a2494/password-reset-email.png?fit=max&auto=format&n=MV7tE-x71x8RWRES&q=85&s=9c882ccdbf0d64a715789d2e63feadc3" alt="Correo electrónico de restablecimiento de contraseña" width="596" height="748" data-path="docs/images/cdy7uua7fh8z/5IBhcrCJ7XXI6OgQOnHMJa/33cdafbfe7a63a48cfaa2e58a12a2494/password-reset-email.png" />
</Frame>

Al hacer clic en el enlace, se redirige al usuario a la [página de restablecimiento de contraseña](/es/docs/customize/login-pages/classic-login/customize-password-reset-page).

Después de enviar la nueva contraseña, el usuario ve una confirmación de que ya puede iniciar sesión con sus nuevas credenciales.

Notas sobre el restablecimiento de contraseña:

* El enlace para restablecer la contraseña del correo electrónico solo es válido para un uso.
* Si el usuario recibe varios correos electrónicos de restablecimiento de contraseña, solo será válido el enlace incluido en el correo más reciente.
* El campo **URL Lifetime** determina durante cuánto tiempo es válido el enlace. Desde el Auth0 Dashboard, puede [personalizar el correo electrónico Change Password](/es/docs/customize/email/email-templates) y [modificar la vigencia del enlace](https://auth0.com/docs/api/authentication/reference#change-password).
* Puede ampliar el flujo de restablecimiento de contraseña para incluir otro factor con Auth0 Actions. Para obtener más información, consulte [Flujo de restablecimiento de contraseña](/es/docs/customize/actions/explore-triggers/password-reset-triggers).

Con [Classic Login](/es/docs/authenticate/login/auth0-universal-login/universal-login-vs-classic-login/classic-experience), puede configurar una URL a la que redirigir a los usuarios después de completar el restablecimiento de contraseña. La URL recibe un indicador de éxito y un mensaje. Para obtener más información, consulte la sección "Configuring the Redirect-To URL" de [Customize Email Templates](/es/docs/customize/email/email-templates).

[Universal Login](/es/docs/authenticate/login/auth0-universal-login/universal-login-vs-classic-login/universal-experience) redirige al usuario a la [ruta de inicio de sesión predeterminada](/es/docs/authenticate/login/auth0-universal-login/configure-default-login-routes) cuando el proceso se completa correctamente, y gestiona los casos de error como parte del flujo de Universal Login. Esta experiencia ignora la URL de redirección de la plantilla de correo electrónico.

<Card title="Generar tickets de restablecimiento de contraseña">
  La Management API proporciona el endpoint [Create a Password Change Ticket](https://auth0.com/docs/api/management/v2#!/Tickets/post_password_change), que genera una URL como la del correo electrónico de restablecimiento de contraseña. Puede usar la URL generada cuando el envío por correo electrónico no sea adecuado. Tenga en cuenta que, en el flujo predeterminado, el correo electrónico sirve para verificar la identidad del usuario. (Un impostor no tendría acceso a la bandeja de entrada del correo electrónico). Si usa la URL del ticket, su aplicación será responsable de verificar la identidad del usuario de algún otro modo.
</Card>

<div id="directly-set-the-new-password">
  ## Establece la nueva contraseña directamente
</div>

Para establecer una nueva contraseña para el usuario directamente, sin enviar un correo electrónico de restablecimiento de contraseña, usa la [Management API](#use-the-management-api) o el [Auth0 Dashboard](#manually-set-users-passwords-using-the-auth0-dashboard).

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Los usuarios no reciben ninguna notificación cuando cambias su contraseña.
</Callout>

<div id="use-the-management-api">
  ### Use Management API
</div>

Si quiere implementar su propio flujo de restablecimiento de contraseña, puede cambiar directamente la contraseña de un usuario mediante una solicitud del servidor a Management API: haga una llamada `PATCH` al [endpoint Update a User](https://auth0.com/docs/api/management/v2#!/Users/patch_users_by_id).

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Si usa Management API para establecer o actualizar la contraseña de un usuario mediante el [endpoint Update a User](https://auth0.com/docs/api/management/v2#!/Users/patch_users_by_id), se aplica la política de seguridad de contraseñas que configure en Auth0 Dashboard.
</Callout>

<AuthCodeGroup>
  ```bash cURL theme={null}
  curl --request PATCH \
    --url 'https://{yourDomain}/api/v2/users/%7BuserId%7D' \
    --header 'authorization: Bearer {yourMgmtApiAccessToken}' \
    --header 'content-type: application/json' \
    --data '{"password": "newPassword","connection": "connectionName"}'
  ```

  ```csharp C# theme={null}
  var client = new RestClient("https://{yourDomain}/api/v2/users/%7BuserId%7D");
  var request = new RestRequest(Method.PATCH);
  request.AddHeader("content-type", "application/json");
  request.AddHeader("authorization", "Bearer {yourMgmtApiAccessToken}");
  request.AddParameter("application/json", "{"password": "newPassword","connection": "connectionName"}", ParameterType.RequestBody);
  IRestResponse response = client.Execute(request);
  ```

  ```go Go theme={null}
  package main

  import (
  	"fmt"
  	"strings"
  	"net/http"
  	"io/ioutil"
  )

  func main() {

  	url := "https://{yourDomain}/api/v2/users/%7BuserId%7D"

  	payload := strings.NewReader("{"password": "newPassword","connection": "connectionName"}")

  	req, _ := http.NewRequest("PATCH", url, payload)

  	req.Header.Add("content-type", "application/json")
  	req.Header.Add("authorization", "Bearer {yourMgmtApiAccessToken}")

  	res, _ := http.DefaultClient.Do(req)

  	defer res.Body.Close()
  	body, _ := ioutil.ReadAll(res.Body)

  	fmt.Println(res)
  	fmt.Println(string(body))

  }
  ```

  ```java Java theme={null}
  HttpResponse<String> response = Unirest.patch("https://{yourDomain}/api/v2/users/%7BuserId%7D")
    .header("content-type", "application/json")
    .header("authorization", "Bearer {yourMgmtApiAccessToken}")
    .body("{"password": "newPassword","connection": "connectionName"}")
    .asString();
  ```

  ```javascript Node.JS theme={null}
  var axios = require("axios").default;

  var options = {
    method: 'PATCH',
    url: 'https://{yourDomain}/api/v2/users/%7BuserId%7D',
    headers: {
      'content-type': 'application/json',
      authorization: 'Bearer {yourMgmtApiAccessToken}'
    },
    data: {password: 'newPassword', connection: 'connectionName'}
  };

  axios.request(options).then(function (response) {
    console.log(response.data);
  }).catch(function (error) {
    console.error(error);
  });
  ```

  ```php PHP theme={null}
  $curl = curl_init();

  curl_setopt_array($curl, [
    CURLOPT_URL => "https://{yourDomain}/api/v2/users/%7BuserId%7D",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "PATCH",
    CURLOPT_POSTFIELDS => "{"password": "newPassword","connection": "connectionName"}",
    CURLOPT_HTTPHEADER => [
      "authorization: Bearer {yourMgmtApiAccessToken}",
      "content-type: application/json"
    ],
  ]);

  $response = curl_exec($curl);
  $err = curl_error($curl);

  curl_close($curl);

  if ($err) {
    echo "cURL Error #:" . $err;
  } else {
    echo $response;
  }
  ```

  ```python Python theme={null}
  import http.client

  conn = http.client.HTTPSConnection("")

  payload = "{"password": "newPassword","connection": "connectionName"}"

  headers = {
      'content-type': "application/json",
      'authorization': "Bearer {yourMgmtApiAccessToken}"
      }

  conn.request("PATCH", "/{yourDomain}/api/v2/users/%7BuserId%7D", payload, headers)

  res = conn.getresponse()
  data = res.read()

  print(data.decode("utf-8"))
  ```

  ```ruby Ruby theme={null}
  require 'uri'
  require 'net/http'
  require 'openssl'

  url = URI("https://{yourDomain}/api/v2/users/%7BuserId%7D")

  http = Net::HTTP.new(url.host, url.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  request = Net::HTTP::Patch.new(url)
  request["content-type"] = 'application/json'
  request["authorization"] = 'Bearer {yourMgmtApiAccessToken}'
  request.body = "{"password": "newPassword","connection": "connectionName"}"

  response = http.request(request)
  puts response.read_body
  ```
</AuthCodeGroup>

<div id="manually-set-users-passwords-using-the-auth0-dashboard">
  ### Establezca manualmente las contraseñas de los usuarios con Auth0 Dashboard
</div>

Cualquier persona con privilegios administrativos en su inquilino de Auth0 puede cambiar manualmente la contraseña de un usuario desde [Auth0 Dashboard > User Management > Users](https://manage.auth0.com/#/users).

1. Seleccione el nombre del usuario cuya contraseña desea cambiar.
2. Busque la **Danger Zone** en la parte inferior de la página.
3. En el cuadro rojo **Change Password**, seleccione **Change**.

   <Frame>
     <img src="https://mintcdn.com/translations/MV7tE-x71x8RWRES/docs/images/cdy7uua7fh8z/5mrEG3UtlZW47AnTikwIGv/94d186b748a53c13145388fa281af8c4/dashboard-users-edit_view-details_danger-zone__1_.png?fit=max&auto=format&n=MV7tE-x71x8RWRES&q=85&s=ce08a4f3e7a9e16082bcdc587e8a6837" alt="Establecer la contraseña manualmente" width="899" height="320" data-path="docs/images/cdy7uua7fh8z/5mrEG3UtlZW47AnTikwIGv/94d186b748a53c13145388fa281af8c4/dashboard-users-edit_view-details_danger-zone__1_.png" />
   </Frame>
4. Introduzca la nueva contraseña y seleccione **Save**.
