Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

メール/パスワード ユーザーの管理 - React Native SDK

項目一覧

  • 前提条件
  • クライアントでのユーザー認証の構成
  • @realm/ Reactプロバイダーを設定する
  • フォールバック コンポーネントによるログイン
  • 新しいユーザー アカウントの登録
  • ユーザーのメールアドレスの確認
  • ユーザー確認方法の再試行
  • 確認メールの再送信
  • ユーザー確認機能の再試行
  • ユーザーのパスワードのリセット
  • メールでパスワードをリセット
  • パスワード リセット機能の呼び出し
  • useEmailPasswordAuth フック参照

アプリの React Native クライアント コードでは、新しいユーザー アカウントの登録、ユーザーのメール アドレスの確認、またはユーザーのパスワードのリセットができます。

@realm/reactフックuseEmailPasswordAuthには、メール/パスワード ユーザーを管理するためのメソッドと列挙型があります。 クイック リファレンスについては、「 useEmailPasswordAuth フック」を参照してください。

ユーザーを認証する前に、次の操作を行う必要があります。

@realm/react にはユーザー認証用のプロバイダーとフックがあります。 ユーザー認証を設定するには:

  1. @realm/reactプロバイダーを設定します。

  2. UserProviderフォールバック コンポーネントを使用してユーザーをログインさせます。

AppProviderでラップされたコンポーネントは、 useAppおよびuseAuthフックにアクセスできます。 これらのコンポーネントは、 AppProviderが App Services バックエンドに正常に接続された場合にのみレンダリングされます。

UserProviderでラップされたコンポーネントは、 userUserフックを使用して認証されたユーザーにアクセスできます。 これらのコンポーネントは、アプリに認証されたユーザーがある場合にのみレンダリングされます

ユーザー認証を設定するには:

  1. App Services にアクセスするために必要なすべてのコンポーネントをAppProviderでラップします。

  2. AppProvider内で、認証されたユーザーにアクセスできるようにするすべてのコンポーネントをUserProvider 1} でラップします。

  3. UserProviderには、ユーザーをログインさせるコンポーネントを含むfallbackプロパティが含まれています。 認証されたユーザーが存在しない場合、アプリはこのコンポーネントをレンダリングします。

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>
);
};

ユーザーはログインする前に、登録されたメール/パスワード アカウントを持っている必要があります。 ユーザーがログインすると、 UserProviderでラップされているすべてのコンポーネントは、 userUserフックからそのユーザー オブジェクトのインスタンスにアクセスできるようになります。

ユーザーをメールとパスワードを使用してログインするには、次の手順に従います。

  1. ユーザーがまだ登録されていない場合は登録します。

  2. useEmailPasswordAuthフックからlogInresultを分解します。

  3. ユーザーのメールとパスワードを オブジェクトとしてLogIn()に渡します。

  4. resultを処理します。

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

新しいメール/パスワード ユーザーを登録する前に、メールアドレスとパスワードを取得する必要があります。 メールアドレスは別のメール/パスワードユーザーと関連付けることはできず、パスワードは 6 文字から 128 文字の間である必要があります。

登録後、アプリにログインする前に、新しいユーザーのメールアドレスを確認する必要があります。

新しいユーザーアカウントを登録するには:

  1. useEmailPasswordAuthフックからregisterresultを分解します。

  2. ユーザーのメールとパスワードを オブジェクトとしてregister()に渡します。

  3. ユーザーのメールアドレスを確認します。

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}
/>
);
};

認証プロバイダーが 新しいユーザー を自動的に確認するように設定されていない限り、新規ユーザーはアプリにログインする前に自分のメール アドレスを確認する必要があります。 確認プロセスはユーザーを登録すると開始され、クライアント コードから確認すると終了します。

メール確認には有効なtokentokenIdが必要です。 これらの値は、認証プロバイダの構成に応じて、異なる場所から取得されます。

登録されているユーザーを確認するには、次の手順に従います。

  1. App Services で、 User Confirmation MethodSend a confirmation emailに設定されていることを確認します。

  2. クライアント コードで、 useEmailPasswordAuthフックからconfirmresultを分解します。

  3. tokentokenIdを オブジェクトとしてconfirm()に渡します。

  4. resultに基づいて確認を処理します。

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

SDK は、ユーザー確認のメールを再送信したり、カスタム確認方法を再試行したりする方法を提供します。

プロバイダーが確認メール を送信するように設定されている場合、Atlas App Services はユーザーが登録すると確認メールを自動的に送信します。 メールには、 30分間有効なトークンを使用して構成されたEmail Confirmation URLへのリンクが含まれています。 ユーザーが期間内にリンクに従って確認しない場合は、新しい確認メールをリクエストする必要があります。

確認メールを再送信するには、以下の手順に従います。

  1. useEmailPasswordAuthフックからresendConfirmationEmailresultを分解します。

  2. ユーザーのメールを オブジェクトとしてresendConfirmationEmail()に渡します。

  3. resultに基づいて確認を処理します。

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

必要に応じて、カスタム確認関数を再実行できます。

ユーザー確認機能を再試行するには、次の手順に従います。

  1. useEmailPasswordAuthフックからretryCustomConfirmationresultを分解します。

  2. ユーザーのメールを オブジェクトとしてretryCustomConfirmation()に渡します。

  3. resultに基づいて確認を処理します。

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

ユーザーのパスワードのリセットは複数段階のプロセスです。

  1. クライアント アプリで、ユーザーがパスワードをリセットするための UI を提供します。 その後、App Services App はメールを送信するか、カスタム関数を実行してユーザーの ID を確認できます。

  2. ユーザーの ID を確認した後、パスワード再設定リクエストを完了します。

  3. パスワードのリセットが完了すると、ユーザーは新しいパスワードを使用してログできます。

希望するパスワード リセット方法の設定方法の詳細については、 App Services メール/パスワード認証 のドキュメントを参照してください。

パスワード リセット メールを送信してユーザーの ID を確認できます。 パスワード リセット メール を送信するように App Services App を設定する必要があります。 モバイル アプリケーションでは、アプリ内で直接パスワードのリセットを取り扱えます。 Android の ディープリンク または iOS の ユニバーサル リンク を設定します。

パスワード リセット メールからのtokentokenIdの値は 30 分間有効です。 ユーザーがその時間内にメールのPassword Reset URLにアクセスしない場合、値は期限切れになり、ユーザーは別のパスワード リセット メールをリクエストする必要があります。

メールでパスワードをリセットするには:

  1. App Services で、 Password Reset MethodSend a password reset emailに設定されていることを確認します。

  2. クライアント コードで、 useEmailPasswordAuthフックからsendResetPasswordEmailresetPasswordresultを構造化します。

  3. ユーザーのメールを オブジェクトとしてsendResetPasswordEmail()に渡します。

  4. リセットメールのパスワード URL からtokentokenIdの値を抽出します。

  5. 新しいユーザー パスワード、 tokentokenIdを オブジェクトとしてresetPassword()に渡します。

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`...
};

定義した App Services Function を呼び出して、パスワードのリセットを処理できます。 パスワードリセット機能を実行する ように構成する必要があります。App Services App

この関数は、ユーザー名、パスワード、および任意の数の追加引数を指定できます。 これらの引数を使用して、セキュリティの質問の回答やその他のチャレンジにユーザーがパスワード リセットを正常に完了するために渡す必要があるものなどの詳細を指定できます。

Atlas App Services 側では、このメソッドを呼び出すときに実行されるカスタム パスワード リセット機能を定義します。 その関数は、次の 3 つのステータスのいずれかを返す必要があります。

  • fail

  • pending

  • success

failステータスはエラーとして扱われます。 SDK メソッドcallResetPasswordFunction()は戻り値を取らないため、クライアントにpendingまたはsuccessステータスを返すことはありません。

パスワードリセット機能を呼び出すには、次のようにします。

  1. App Services で、パスワード リセット機能を作成します。

  2. Atlas App Services で、 Password Reset MethodRun a password reset functionに設定されていることを確認し、それが新規関数に設定されていることを確認します。

  3. クライアント コードで、 useEmailPasswordAuthフックからcallResetPasswordFunctionresultを分解します。

  4. ユーザーのメールとパスワードを オブジェクトとしてcallResetPasswordFunction()に渡し、カスタム関数に定義したその他の引数を渡します。

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

ユーザーに本人確認を行うために追加の手順を実行したい場合、 App Services のパスワード リセット関数によりpendingが返されることがあります。 ただし、その戻り値は SDK のcallResetPasswordFunction()に渡されないため、クライアントアプリはpendingステータスを処理するために独自のロジックを実装する必要があります。

サーバー側関数により、カスタム メール プロバイダーを使用してメールが送信される場合があります。 または、SMS を使用して、テキスト メッセージでユーザーの ID を確認することもできます。

App Services のパスワード リセット関数のコンテキストで、 tokentokenIdにアクセスできます。 App Services のパスワード リセット機能からこの情報を渡す場合、プラットフォーム固有のディープ リンクまたはユニバーサル リンクを使用してこれらの値をアプリに渡すことができます。 次に、クライアント アプリケーションはuseEmailPasswordAuth フックを使用してパスワード リセット フローを完了できます。

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`...
};

App Services のパスワード リセット関数が関数内で追加の検証を行う場合、またはパスワードのリセットを試みる前にユーザーの ID を検証した場合は、 successを返すように App Services 関数を構成できます。 ただし、その戻り値は SDK のcallResetPasswordFunction()に渡されないため、クライアントアプリはsuccessステータスを処理するために独自のロジックを実装する必要があります。

useEmailPasswordAuthフックには、メール/パスワード ユーザーの管理を効率化するメソッドがあります。 認証に関連する状態もあります。 詳細については、 useEmailPasswordAuthリファレンスを参照してください。

また、 useEmailPasswordAuthについては、 @realm/react API ドキュメントも確認してください。

戻る

カスタムユーザーデータ