Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Administrar usuarios

Gestionar usuarios de correo electrónico/contraseña - SDK de React Native

You can register a new user account, confirm a user email address, or reset a user's password in your app's React Native client code.

La @realm/react El gancho useEmailPasswordAuth tiene métodos y enumeraciones específicos para administrar usuarios de correo electrónico y contraseña. Consulte Hook useEmailPasswordAuth para una referencia rápida.

Before you can authenticate a user, you must:

@realm/react has providers and hooks for user authentication. To configure user authentication:

  1. Configura los proveedores de @realm/react.

  2. Log a user in with a UserProvider fallback component.

Components wrapped by AppProvider can access the useApp and useAuth hooks. These components only render if AppProvider successfully connects to your App Services backend.

Los componentes encapsulados por UserProvider pueden acceder a usuarios autenticados con el gancho useUser. Estos componentes solo se renderizan si la aplicación tiene un usuario autenticado.

To configure user authentication:

  1. Envuelva todos los componentes que necesitan acceder a App Services en AppProvider.

  2. Dentro de AppProvider, envuelva todos los componentes a los que desea que tenga acceso un usuario autenticado con UserProvider.

  3. En UserProvider, incluya una propiedad fallback con un componente que inicie sesión a un usuario. La aplicación representa este componente si no hay ningún usuario autenticado.

import React from 'react';
import {AppProvider, UserProvider} from '@realm/react';
// Fallback log in component that's defined in another file.
import {LogIn} from './Login';
export const LoginExample = () => {
return (
<ScrollView>
<AppProvider id={APP_ID}>
{/* If there is no authenticated user, mount the
`fallback` component. When user successfully
authenticates, the app unmounts the `fallback`
component (in this case, the `LogIn` component). */}
<UserProvider fallback={LogIn}>
{/* Components inside UserProvider have access
to the user. These components only mount if
there's an authenticated user. */}
<UserInformation />
</UserProvider>
</AppProvider>
</ScrollView>
);
};

Los usuarios deben tener una cuenta de correo electrónico/contraseña registrada antes de poder iniciar sesión. Después de que un usuario inicie sesión, todos los componentes envueltos en UserProvider tienen acceso a una instancia de ese objeto de usuario mediante el hook useUser.

To log a user in with email and password:

  1. Registrar usuario si aún no lo está.

  2. Destructure logIn and result from the useEmailPasswordAuth hook.

  3. Pass the user's email and password to LogIn() as an object.

  4. Handle the result.

export const LoginWithEmail = () => {
const {logIn, result} = useEmailPasswordAuth();
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const performLogin = () => {
logIn({email, password});
};
// Handle `result`...
};

Before you can register a new email/password user, you need to get their email address and password. The email address must not be associated with another email/password user and the password must be between 6 and 128 characters.

Después del registro, debes confirmar la dirección de correo electrónico del nuevo usuario antes de que pueda iniciar sesión en tu aplicación.

To register a new user account:

  1. Destructure register and result from the useEmailPasswordAuth hook.

  2. Pass the user's email and password to register() as an object.

  3. Confirm the user's email address.

type RegisterButtonProps = {
email: string;
password: string;
};
const RegisterButton = ({email, password}: RegisterButtonProps) => {
const {register, result, logIn} = useEmailPasswordAuth();
// Log in the user after successful registration
useEffect(() => {
if (result.success && result.operation === AuthOperationName.Register) {
logIn({email, password});
}
}, [result, logIn, email, password]);
// For this example, the App Services backend automatically
// confirms users' emails.
const performRegistration = () => {
register({email, password});
};
return (
<Button
title="Register"
onPress={performRegistration}
/>
);
};

Los nuevos usuarios deben confirmar que poseen su dirección de correo electrónico antes de iniciar sesión en la aplicación, a menos que el proveedor de autenticación esté configurado para confirmar automáticamente a los nuevos usuarios. El proceso de confirmación comienza al registrar un usuario y finaliza al confirmarlo desde su código de cliente.

La confirmación por correo electrónico requiere un token y un tokenId válidos. Estos valores se obtienen de diferentes fuentes según la configuración del proveedor de autenticación:

To confirm a registered user:

  1. En App Services, asegúrese de que User Confirmation Method esté configurado en Send a confirmation email.

  2. In your client code, destructure confirm and result from the useEmailPasswordAuth hook.

  3. Pasa token y tokenId a confirm() como un objeto.

  4. Gestione la confirmación según result.

interface ConfirmUserProps {
token: string;
tokenId: string;
}
const ConfirmUser = ({token, tokenId}: ConfirmUserProps) => {
const {confirm, result} = useEmailPasswordAuth();
const performConfirmation = () => {
confirm({token, tokenId});
};
// Handle `result`...
}

El SDK proporciona métodos para volver a enviar correos electrónicos de confirmación de usuario o reintentar métodos de confirmación personalizados.

Si el proveedor está configurado para enviar un correo electrónico de confirmación, Atlas App Services enviará automáticamente un correo electrónico de confirmación cuando un usuario se registre. El correo electrónico contiene un enlace a la configuración Email Confirmation URL con un token válido durante 30 minutos. Si un usuario no sigue el enlace y lo confirma dentro de ese periodo, debe solicitar un nuevo correo electrónico de confirmación.

To resend a confirmation email:

  1. Destructure resendConfirmationEmail and result from the useEmailPasswordAuth hook.

  2. Pass the user's email to resendConfirmationEmail() as an object.

  3. Gestione la confirmación según result.

const ResendUserConfirmationEmail = () => {
const {resendConfirmationEmail, result} = useEmailPasswordAuth();
const [email, setEmail] = useState('');
const performResendConfirmationEmail = () => {
resendConfirmationEmail({email});
};
// Handle `result`...
}

Puedes volver a ejecutar tu función de confirmación personalizada si es necesario.

To retry a user confirmation function:

  1. Destructure retryCustomConfirmation and result from the useEmailPasswordAuth hook.

  2. Pass the user's email to retryCustomConfirmation() as an object.

  3. Gestione la confirmación según result.

const RetryCustomUserConfirmation = () => {
const {retryCustomConfirmation, result} = useEmailPasswordAuth();
const [email, setEmail] = useState('');
const performRetryCustomConfirmation = () => {
retryCustomConfirmation({email});
};
// Handle `result`...
}

Restablecer la contraseña de un usuario es un proceso de varios pasos.

  1. In your client app, provide a UI for a user to reset their password. Your App Services App can then send an email or run a custom function to confirm the user's identity.

  2. After confirming the user's identity, complete the password reset request.

  3. Una vez finalizado el restablecimiento de la contraseña, el usuario puede iniciar sesión con la nueva contraseña.

Para obtener más información sobre cómo configurar tu método preferido de restablecimiento de contraseña, consulta la Documentación de autenticación por correo electrónico/contraseña de aplicación Services.

Puedes enviar correos electrónicos de restablecimiento de contraseña para confirmar la identidad de los usuarios. Debes configurar tu aplicación de Servicios de Apps para que envíe un correo electrónico de restablecimiento de contraseña. Las aplicaciones móviles pueden gestionar el restablecimiento de contraseña directamente en la aplicación. Configura enlaces profundos en Android o enlaces universales en iOS.

The token and tokenId values from password reset emails are valid for 30 minutes. If users don't visit the email's Password Reset URL in that time, the values expire and users must request another password reset email.

To reset a password with email:

  1. En App Services, asegúrese de que Password Reset Method esté configurado en Send a password reset email.

  2. In your client code, destructure sendResetPasswordEmail, resetPassword, and result from the useEmailPasswordAuth hook.

  3. Pass the user's email to sendResetPasswordEmail() as an object.

  4. Extract the token and tokenId values from the reset email password URL.

  5. Pass the new user password, token, and tokenId to resetPassword() as an object.

const SendResetPasswordEmailButton = ({email}: {email: string}) => {
const [errorMessage, setErrorMessage] = useState('');
const {sendResetPasswordEmail, result} = useEmailPasswordAuth();
const performSendResetPasswordEmail = () => {
sendResetPasswordEmail({email: email});
};
// Handle `result`...
};
interface ResetPasswordButtonProps {
password: string;
token: string;
tokenId: string;
}
const ResetPasswordButton = ({
password,
token,
tokenId,
}: ResetPasswordButtonProps) => {
const [errorMessage, setErrorMessage] = useState('');
const {resetPassword, result} = useEmailPasswordAuth();
const performPasswordReset = () => {
resetPassword({token, tokenId, password});
};
// Handle `result`...
};

Puedes llamar a una función de aplicación Services que definas para gestionar restablecimientos de contraseñas. Debes configurar tu App Services App para ejecutar una función de restablecimiento de contraseña.

Esta función puede tomar un nombre de usuario, una contraseña y cualquier número de argumentos adicionales. Puedes utilizar estos argumentos para especificar detalles como las respuestas a las preguntas de seguridad u otros desafíos que el usuario debe superar para completar con éxito el restablecimiento de contraseña.

En App Services, define la función de restablecimiento de contraseña personalizada que se ejecuta al llamar a este método. Esta función debe devolver uno de tres estados posibles:

  • fail

  • pending

  • success

A fail status is treated as an error. The SDK method callResetPasswordFunction() does not take return values, so it does not return a pending or success status to the client.

Para llamar a una función de restablecimiento de contraseña:

  1. In App Services, create a password reset function.

  2. In App Services, make sure Password Reset Method is set to Run a password reset function and point it to your new function.

  3. In your client code, destructure callResetPasswordFunction and result from the useEmailPasswordAuth hook.

  4. Pase el correo electrónico y la contraseña del usuario a callResetPasswordFunction() como un objeto, seguido de cualquier otro argumento que haya definido para su función personalizada.

const ResetPasswordWithFunction = () => {
const {callResetPasswordFunction, result} = useEmailPasswordAuth();
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const performResetPassword = () => {
callResetPasswordFunction({email, password}, "extraArg1", "extraArg2");
};
}

La función de restablecimiento de contraseña de App Services puede devolver pending si desea que el usuario realice algún paso adicional para confirmar su identidad. Sin embargo, este valor de retorno no se pasa al del callResetPasswordFunction() SDK, por lo que la aplicación cliente debe implementar su propia lógica para gestionar un pending estado.

Tu función del lado del servidor puede enviar un correo electrónico utilizando un proveedor de correo electrónico personalizado. O puedes usar SMS para confirmar la identidad del usuario mediante un mensaje de texto.

Tienes acceso a token y tokenId en el contexto de la función de restablecimiento de contraseña de App Services. Si pasas esta información desde la función de restablecimiento de contraseña de App Services, puedes devolver estos valores a tu aplicación mediante enlaces profundos específicos de la plataforma o enlaces universales. Luego, tu aplicación cliente puede usar el enlace useEmailPasswordAuth para completar el proceso de restablecimiento de contraseña.

interface ResetPasswordButtonProps {
password: string;
token: string;
tokenId: string;
}
const ResetPasswordButton = ({
password,
token,
tokenId,
}: ResetPasswordButtonProps) => {
const [errorMessage, setErrorMessage] = useState('');
const {resetPassword, result} = useEmailPasswordAuth();
const performPasswordReset = () => {
resetPassword({token, tokenId, password});
};
// Handle `result`...
};

If your App Services password reset function does additional validation within the function, or if you have validated the user's identity prior to attempting to reset the password, you may configure the App Services function to return success. However, that return value is not passed to the SDK's callResetPasswordFunction(), so your client app must implement its own logic to handle a success status.

El hook useEmailPasswordAuth tiene métodos para facilitar la gestión de usuarios de correo electrónico/contraseña. También tiene estado relacionado con la autenticación. Consulta la referencia de useEmailPasswordAuth para más detalles.

También puede consultar la documentación de la @realm/react API para useEmailPasswordAuth.

Volver

Custom User Data