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.
Requisitos previos
Before you can authenticate a user, you must:
Activa la autenticación por correo electrónico/contraseña en la aplicación. Para obtener detalles, consulta Autenticación por correo electrónico/contraseña en la documentación de App Services.
Configure User Authentication in Client
@realm/react has providers and hooks for user authentication. To configure user authentication:
Configura los proveedores de
@realm/react.Log a user in with a
UserProviderfallback component.
Configurar proveedores de @realm/react
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:
Envuelva todos los componentes que necesitan acceder a App Services en
AppProvider.Dentro de
AppProvider, envuelva todos los componentes a los que desea que tenga acceso un usuario autenticado conUserProvider.En
UserProvider, incluya una propiedadfallbackcon 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> ); };
Log In with a Fallback Component
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:
Registrar usuario si aún no lo está.
Destructure
logInandresultfrom theuseEmailPasswordAuthhook.Pass the user's email and password to
LogIn()as an object.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`... };
Register a New User Account
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:
Destructure
registerandresultfrom theuseEmailPasswordAuthhook.Pass the user's email and password to
register()as an object.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} /> ); };
Confirm a User's Email Address
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:
Envíe un correo electrónico de confirmación. Los
tokentokenIdvalores y se incluyen como parámetros de consulta en el Email Confirmation URL.Ejecutar una función de confirmación. Los valores
tokenytokenIdse pasan a la función como argumentos.
To confirm a registered user:
En App Services, asegúrese de que User Confirmation Method esté configurado en Send a confirmation email.
In your client code, destructure
confirmandresultfrom theuseEmailPasswordAuthhook.Pasa
tokenytokenIdaconfirm()como un objeto.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`... }
Retry User Confirmation Methods
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.
Reenviar un correo electrónico de confirmación
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:
Destructure
resendConfirmationEmailandresultfrom theuseEmailPasswordAuthhook.Pass the user's email to
resendConfirmationEmail()as an object.Gestione la confirmación según
result.
const ResendUserConfirmationEmail = () => { const {resendConfirmationEmail, result} = useEmailPasswordAuth(); const [email, setEmail] = useState(''); const performResendConfirmationEmail = () => { resendConfirmationEmail({email}); }; // Handle `result`... }
Retry a User Confirmation Function
Puedes volver a ejecutar tu función de confirmación personalizada si es necesario.
To retry a user confirmation function:
Destructure
retryCustomConfirmationandresultfrom theuseEmailPasswordAuthhook.Pass the user's email to
retryCustomConfirmation()as an object.Gestione la confirmación según
result.
const RetryCustomUserConfirmation = () => { const {retryCustomConfirmation, result} = useEmailPasswordAuth(); const [email, setEmail] = useState(''); const performRetryCustomConfirmation = () => { retryCustomConfirmation({email}); }; // Handle `result`... }
Reset a User's Password
Restablecer la contraseña de un usuario es un proceso de varios pasos.
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.
After confirming the user's identity, complete the password reset request.
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.
Reset Password with Email
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:
En App Services, asegúrese de que Password Reset Method esté configurado en Send a password reset email.
In your client code, destructure
sendResetPasswordEmail,resetPassword, andresultfrom theuseEmailPasswordAuthhook.Pass the user's email to
sendResetPasswordEmail()as an object.Extract the
tokenandtokenIdvalues from the reset email password URL.Pass the new user password,
token, andtokenIdtoresetPassword()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`... };
Call a Password Reset Function
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:
failpendingsuccess
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:
In App Services, create a password reset function.
In App Services, make sure Password Reset Method is set to Run a password reset function and point it to your new function.
In your client code, destructure
callResetPasswordFunctionandresultfrom theuseEmailPasswordAuthhook.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"); }; }
Caso pendiente del lado del servidor
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`... };
Server-Side Success Case
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.
useEmailPasswordAuth Hook Reference
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.