Managed usuários de e-mail/senha - React Native SDK
Nesta página
- Pré-requisitos
- Configurar a autenticação do usuário no cliente
- Configurar fornecedores @realm/react
- Conecte-se com um componente de contingência
- Registrar uma nova conta de usuário
- Confirmar um endereço de e-mail de usuário
- Repetir métodos de confirmação do usuário
- Reenviar um e-mail de confirmação
- Tentar novamente uma função de confirmação do usuário
- Redefinir a senha de um usuário
- Redefinir senha com e-mail
- Ligar para uma função de redefinição de senha
- Referência do Hook useEmailPasswordAuth
Você pode registrar uma nova conta de usuário, confirmar um endereço de e-mail de usuário ou redefinir a senha de um usuário no código do cliente React Native do seu aplicativo.
O gancho @realm/react
useEmailPasswordAuth
tem métodos e enums específicos para gerenciar usuários de e-mail/senha. Consulte useEmailPasswordAuth Hook para uma referência rápida.
Pré-requisitos
Antes de autenticar um usuário, você deve:
Ative a autenticação por e-mail/senha no aplicativo. Para obter detalhes, consulte Autenticação por e-mail/senha na documentação do Atlas App Services .
Configurar a autenticação do usuário no cliente
@realm/react
tem provedores e ganchos para autenticação do usuário. Para configurar a autenticação do usuário:
Configure
@realm/react
provedores.Faça login de um usuário com um componente de contingência
UserProvider
.
Configurar fornecedores @realm/react
Os componentes envolvidos pelo AppProvider podem acessar os hooks useApp e useAuth . Esses componentes só serão renderizados se AppProvider
se conectar com êxito ao backend do Atlas App Services .
Os componentes agrupados pelo UserProvider podem acessar usuários autenticados com o gancho useUser. Esses componentes só serão renderizados se o seu aplicativo tiver um usuário autenticado
Para configurar a autenticação do usuário:
Encerre todos os componentes que precisam acessar o App Services em
AppProvider
.Dentro do
AppProvider
, encerre todos os componentes que você deseja ter acesso como usuário autenticado comUserProvider
.Em
UserProvider
, inclua um acessório defallback
com um componente que registra um usuário. O aplicativo renderiza este componente se não houver nenhum usuário 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> ); };
Conecte-se com um componente de contingência
Os usuários devem ter uma conta de e-mail/senha registrada antes de poderem fazer login. Depois que um usuário faz login, todos os componentes envoltos em UserProvider
têm acesso a uma instância desse objeto de usuário por meio do hook useUser .
Para fazer login de um usuário com e-mail e senha:
Registre o usuário se ele ainda não for.
Desestruturar
logIn
eresult
do ganchouseEmailPasswordAuth
.Passe o e-mail e a senha do usuário para
LogIn()
como um objeto.Lidar com o
result
.
export const LoginWithEmail = () => { const {logIn, result} = useEmailPasswordAuth(); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const performLogin = () => { logIn({email, password}); }; // Handle `result`... };
Registrar uma nova conta de usuário
Antes de registrar um novo usuário de e-mail/senha, você precisa obter o endereço de e-mail e a senha dele. O endereço de e-mail não deve ser associado a outro usuário de e-mail/senha e a senha deve ter entre 6 e 128 caracteres.
Após o registro, você deve confirmar o endereço de e-mail de um novo usuário antes que ele possa fazer login no seu aplicativo.
Para registrar uma nova conta de usuário:
Desestruturar
register
eresult
do ganchouseEmailPasswordAuth
.Passe o e-mail e a senha do usuário para
register()
como um objeto.Confirme o endereço de e-mail do usuário.
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} /> ); };
Confirmar um endereço de e-mail de usuário
Os novos usuários devem confirmar que possuem o endereço de e-mail antes de fazer login no seu aplicativo, a menos que o provedor de autenticação esteja configurado para confirmar automaticamente os novos usuários. O processo de confirmação começa quando você registra um usuário e termina quando você o confirma a partir do código do cliente.
A confirmação por e-mail requer um token
e tokenId
válidos. Você obtém esses valores de diferentes locais, dependendo da configuração do provedor de autenticação:
Envie um e-mail de confirmação. Os valores
token
etokenId
são incluídos como parâmetros de consulta no Email Confirmation URL.Execute uma função de confirmação. Os valores
token
etokenId
são passados para a função como argumentos.
Para confirmar um usuário registrado:
No App Services, certifique-se de que User Confirmation Method esteja definido como Send a confirmation email.
No código do cliente, desestruturar
confirm
eresult
do ganchouseEmailPasswordAuth
.Passe
token
etokenId
paraconfirm()
como um objeto.Lidar com a confirmação com base em
result
.
interface ConfirmUserProps { token: string; tokenId: string; } const ConfirmUser = ({token, tokenId}: ConfirmUserProps) => { const {confirm, result} = useEmailPasswordAuth(); const performConfirmation = () => { confirm({token, tokenId}); }; // Handle `result`... }
Repetir métodos de confirmação do usuário
O SDK fornece métodos para reenviar e-mails de confirmação do usuário ou tentar novamente métodos de confirmação personalizados.
Reenviar um e-mail de confirmação
Se o provedor estiver configurado para enviar um e-mail de confirmação, o Atlas App Services enviará automaticamente um e-mail de confirmação quando um usuário se registrar. O e-mail contém um link para o Email Confirmation URL configurado com um token válido por 30 minutos. Se um usuário não seguir o link e confirmar dentro desse período, ele deverá solicitar um novo e-mail de confirmação.
Para reenviar um e-mail de confirmação:
Desestruturar
resendConfirmationEmail
eresult
do ganchouseEmailPasswordAuth
.Passe o e-mail do usuário para
resendConfirmationEmail()
como um objeto.Lidar com a confirmação com base em
result
.
const ResendUserConfirmationEmail = () => { const {resendConfirmationEmail, result} = useEmailPasswordAuth(); const [email, setEmail] = useState(''); const performResendConfirmationEmail = () => { resendConfirmationEmail({email}); }; // Handle `result`... }
Tentar novamente uma função de confirmação do usuário
Você pode executar novamente sua função de confirmação personalizada, se necessário.
Para tentar novamente uma função de confirmação do usuário:
Desestruturar
retryCustomConfirmation
eresult
do ganchouseEmailPasswordAuth
.Passe o e-mail do usuário para
retryCustomConfirmation()
como um objeto.Lidar com a confirmação com base em
result
.
const RetryCustomUserConfirmation = () => { const {retryCustomConfirmation, result} = useEmailPasswordAuth(); const [email, setEmail] = useState(''); const performRetryCustomConfirmation = () => { retryCustomConfirmation({email}); }; // Handle `result`... }
Redefinir a senha de um usuário
A redefinição da senha de um usuário é um processo de várias etapas.
Em seu aplicativo cliente, forneça uma interface do usuário para um usuário redefinir sua senha. Em seguida, seu App Services App pode enviar um e-mail ou executar uma função personalizada para confirmar a identidade do usuário.
Depois de confirmar a identidade do usuário, conclua a solicitação de redefinição de senha.
Após a redefinição de senha ser concluída, o usuário poderá se conectar usando a nova senha.
Para obter mais informações sobre como definir seu método de redefinição de senha preferido, consulte a documentação de autenticação de e-mail/senha doAtlas App Services .
Redefinir senha com e-mail
Você pode enviar e-mails de redefinição de senha para confirmar as identidades dos usuários. Você deve configurar seu aplicativo do App Services App para enviar um e-mail de redefinição de senha. Os aplicativos móveis podem lidar com redefinições de senha diretamente na aplicação. Configure links diretos no Android ou links universais no iOS.
Os valores token
e tokenId
dos e-mails de redefinição de senha são válidos por 30 minutos. Se os usuários não acessarem o Password Reset URL do e-mail nesse período, os valores expirarão e os usuários deverão solicitar outro e-mail de redefinição de senha.
Para redefinir uma senha com e-mail:
No App Services, certifique-se de que Password Reset Method esteja definido como Send a password reset email.
No código do cliente, desestruturar
sendResetPasswordEmail
,resetPassword
eresult
do ganchouseEmailPasswordAuth
.Passe o e-mail do usuário para
sendResetPasswordEmail()
como um objeto.Extraia os valores
token
etokenId
da URL de redefinição de senha do e-mail.Passe a nova senha de usuário,
token
, etokenId
pararesetPassword()
como um objeto.
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`... };
Ligar para uma função de redefinição de senha
Você pode chamar uma Atlas App Services Function que você define para lidar com redefinições de senha. Você deve configurar seu App Services App para executar uma função de redefinição de senha.
Esta função pode receber um nome de usuário, uma senha e qualquer número de argumentos adicionais. Você pode usar esses argumentos para especificar detalhes como respostas a perguntas de segurança ou outros desafios que o usuário deve passar para concluir com êxito uma redefinição de senha.
No lado do App Services, você define a função personalizada de redefinição de senha que é executada quando você chama esse método. Essa função deve retornar um dos três status possíveis:
fail
pending
success
Um status fail
é tratado como um erro. O método callResetPasswordFunction()
do SDK não recebe valores de retorno, portanto, não retorna um status pending
ou success
ao cliente.
Para chamar uma função de redefinição de senha:
No App Services, crie uma função de redefinição de senha.
No App Services, certifique-se de que Password Reset Method está definido para Run a password reset function e ponto-o para a sua nova função.
No código do cliente, desestruturar
callResetPasswordFunction
eresult
do ganchouseEmailPasswordAuth
.Passe o e-mail e a senha do usuário para
callResetPasswordFunction()
como um objeto, seguido por quaisquer outros argumentos que você definiu para sua função personalizada.
const ResetPasswordWithFunction = () => { const {callResetPasswordFunction, result} = useEmailPasswordAuth(); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const performResetPassword = () => { callResetPasswordFunction({email, password}, "extraArg1", "extraArg2"); }; }
Caso pendente do lado do servidor
Sua função de redefinição de senhaAtlas App Services pode retornar pending
se você quiser que o usuário execute alguma etapa adicional para confirmar sua identidade. No entanto, esse valor de retorno não é passado para o callResetPasswordFunction()
do SDK, portanto, seu aplicativo cliente deve implementar sua própria lógica para lidar com um status pending
.
Sua função no servidor pode enviar um e-mail usando um provedor de e-mail personalizado. Ou você pode usar SMS para confirmar a identidade do usuário por mensagem de texto.
Você tem acesso a um token
e tokenId
no contexto da função de redefinição de senha do Atlas App Services . Se você passar essas informações pela função de redefinição de senha do Atlas App Services , poderá passar esses valores de volta ao seu aplicativo usando links detalhados ou links universais específicos da plataforma. Em seguida, seu aplicativo cliente pode usar o gancho useEmailPasswordAuth para concluir o fluxo de redefinição de senha.
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`... };
Caso de sucesso do servidor
Se a função de redefinição de senha doAtlas App Services fizer validação adicional dentro da função ou se você tiver validado a identidade do usuário antes de tentar redefinir a senha, poderá configurar a função do Atlas App Services para retornar success
. No entanto, esse valor de retorno não é passado para o callResetPasswordFunction()
do SDK, portanto, seu aplicativo cliente deve implementar sua própria lógica para lidar com um status success
.
Referência do Hook useEmailPasswordAuth
O hook useEmailPasswordAuth
tem métodos para simplificar o gerenciamento de usuários de e-mail/senha. Tem também estado relacionado à autenticação. Consulte a referência useEmailPasswordAuth para obter detalhes.
Você pode também consultar a documentação da API @realm/react
do useEmailPasswordAuth.