Atlas App Services のメール/パスワード認証プロバイダーを使用すると、クライアント コードから新しいアカウントを登録し、メールアドレスを確認して、クライアント コードからユーザーのパスワードをリセットできます。
警告
バージョン 0.5.0 重大な変更
Realm Flutter SDK バージョン 0.5.0 には、メール/パスワード認証に対する重大な変更が含まれています。 この変更により、SDK の以前のバージョンでパスワードの末尾に Unicode null 文字 \u0000が追加されていたバグが修正されます。
その結果、アプリケーションを 0.5.0 より大きいバージョンを使用するようにアップグレードすると、ユーザーはパスワードをリセットするか、新しいアカウントを作成する必要があります。 >0.5.0 に更新すると、以前のパスワードは使用できなくなります。
始める前に
クライアント コードの作成を開始する前に、App Services が提供するさまざまなメール/パスワード認証フローを理解し、アプリケーションのバックエンド実装を構成する必要があります。 App Services には、メール/パスワードのユーザー ID を確認し、ユーザーパスワードをリセットするためのさまざまな方法があります。 App Services のメール/パスワード認証、有効化、構成の詳細について説明します。
ユーザーを登録する
インスタンスを引数として、新しい EmailPasswordAuthProvider
Appインスタンスを作成します。ユーザーのメールとパスワードを引数として渡して、EmailPasswordAuthProvider.registerUser() を呼び出します。
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.registerUser("lisa@example.com", "myStr0ngPassw0rd");
注意
ユーザーを登録しても、そのユーザーはログインしません。 ユーザーを個別にログインする必要があります。
ユーザーのログイン
Credentials.emailPassword() を呼び出してメール/パスワードの認証情報を作成します。ユーザーのメールとパスワード。
生成された認証情報を
app.logInに渡します。
final emailPwCredentials = Credentials.emailPassword("lisa@example.com", "myStr0ngPassw0rd"); await app.logIn(emailPwCredentials);
新しいユーザーのメールアドレスの確認
新しいメール/パスワード ユーザーを登録したら、ユーザーを自動的に確認するように App Services を構成しない限り、メール アドレスを確認する必要があります。
カスタム確認機能
メールアドレス確認 にカスタム関数を使用するように Atlas App Services を構成する場合は、カスタム関数のフローのロジックでユーザー確認を取り扱います。 App Services バックエンドは、ユーザーの登録時にカスタム関数を呼び出します。
確認メールの送信
App Services がメールでユーザー確認を取り扱うように設定している場合は、確認メールを送信する必要があります。
新規作成したユーザーを確認するには、確認用の token と tokenId を EmailPasswordAuthProvider.confirmUser() に渡します。これらは、登録時にユーザーのメールアドレスに送信されるメールに含まれます。
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.confirmUser(token, tokenId);
ユーザー確認の再試行
SDK には、ユーザー確認のメールを再送信したり、カスタム確認を再試行したりするメソッドが用意されています。
ユーザー確認機能の再試行
App Services バックエンドをカスタム ユーザー確認機能を再試行するように構成した場合は、このユーザー確認メソッドを使用します。
確認機能を再試行するには、サインアップに使用したメールを EmailPasswordAuthProvider.retryCustomConfirmationFunction() に渡します。
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.retryCustomConfirmationFunction("lisa@example.com");
ユーザー確認メールの再送信
App Services バックエンドを確認メールを再送信するように構成した場合は、このユーザー確認方法を使用します。 各 URL の確認トークンは30分後に期限切れになります。 ユーザーが期間内にリンクに従って確認しない場合は、新しい確認メールをリクエストする必要があります。
確認メールを再送信するには、サインアップに使用したメールをEmailPasswordAuthProvider.resendUserConfirmation(). に渡します。
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.resendUserConfirmation("lisa@example.com");
ユーザーのパスワードのリセット
ユーザーのパスワードのリセットは複数段階のプロセスです。
クライアント アプリで、ユーザーがパスワードをリセットするための UI を提供します。 その後、App Services App はメールを送信するか、カスタム関数を実行してユーザーの ID を確認できます。
ユーザーの ID を確認した後、パスワード再設定リクエストを完了できます。
パスワードのリセットが完了すると、ユーザーは新しいパスワードを使用してログできます。
アプリで使用する方法を選択するには、 App Services 認証パスワード リセットの動作を構成します。
リセット関数の呼び出し
アプリをパスワードリセット機能を実行するように構成するときは、EmailPasswordAuthProvider.callResetPasswordFunction()を呼び出すときに実行する関数を定義します。この関数は、ユーザー名、パスワード、および任意の数の追加引数を指定できます。これらの引数を使用して、セキュリティの質問の回答やその他のチャレンジにユーザーがパスワード リセットを正常に完了するために渡す必要があるものなどの詳細を指定できます。
独自のパスワード リセット フローを定義する場合は、カスタム パスワード リセット機能を使用することをお勧めします。 For example, you might send a custom password reset email from a specific domain. または、メール以外のサービスを使用してユーザーの ID を確認することもできます。
Atlas App Services 側では、このメソッドを呼び出すときに実行されるカスタム パスワード リセット機能を定義します。 この関数は、次の 3 つのステータスのいずれかを返すことができます。
failpendingsuccess
failステータスは SDK によってエラーとして扱われます。 SDK callResetPasswordFunction()は戻り値を取らないため、クライアントにpendingまたはsuccessステータスを返すことはありません。
サーバー側の保留中のケース
ユーザーに本人確認を行うために追加の手順を実行したい場合、 App Services のパスワード リセット関数によりpendingが返されることがあります。 ただし、その戻り値は SDK のcallResetPasswordFunction()に渡されないため、クライアントアプリはpendingステータスを処理するために独自のロジックを実装する必要があります。
サーバー側関数により、カスタム メール プロバイダーを使用してメールが送信される場合があります。 または、SMS を使用して、テキスト メッセージでユーザーの ID を確認することもできます。
App Services パスワード リセット関数コンテキストで、token と tokenId にアクセスできます。App Services のパスワード リセット機能からこの情報を渡す場合、プラットフォーム固有のディープ リンクまたはユニバーサル リンクを使用してこれらの値をアプリに渡すことができます。その後、クライアントアプリケーションはEmailPasswordAuthProvider.completeResetPasswordを呼び出してパスワード リセット フローを完了できます。
// The password reset function takes any number of // arguments. final args = []; EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.callResetPasswordFunction( "lisa@example.com", "n3wSt0ngP4ssw0rd!", functionArgs: args); // ... Later... // Token and tokenId are parameters you can access // in the App Services function context. You could send // this to the user via email, SMS, or some other method. final token = "someToken"; final tokenId = "someTokenId"; await authProvider.completeResetPassword( "n3wSt0ngP4ssw0rd!", token, tokenId);
サーバー側の成功例
App Services のパスワード リセット関数が関数内で追加の検証を行う場合、またはパスワードのリセットを試みる前にユーザーの ID を検証した場合は、 successを返すように App Services 関数を構成できます。 ただし、その戻り値は SDK のcallResetPasswordFunction()に渡されないため、クライアントアプリはsuccessステータスを処理するために独自のロジックを実装する必要があります。
この例では 関数を呼び出すと、パスワード リセット プロセス全体が実行されます。
// The password reset function takes any number of // arguments. You might ask the user to provide answers to // security questions, for example, to verify the user // should be able to complete the password reset. final args = [ "Snowball II", "Springfield Elementary School", "Bouvier" ]; EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.callResetPasswordFunction( "lisa@example.com", "n3wSt0ngP4ssw0rd!", functionArgs: args);
パスワード リセット メールの送信
ユーザーの ID を確認するためにパスワード リセット メールを送信するには、パスワード リセット メールを送信するようにアプリを設定する必要があります。
パスワード リセットメールを送信するには、サインアップに使用したメールを EmailPasswordAuthProvider.resetPassword() に渡します。
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.resetPassword("lisa@example.com");
パスワード リセット メールには、token と tokenId の 2 つの値でエンコードされたURLが含まれています。パスワード リセット フローを完了するには、クライアント上で、またはバックエンドでカスタム関数を呼び出して、ユーザーのパスワードをリセットします。SDK を使用してパスワードのリセットを完了するには、これらの値を EmailPasswordAuthProvider.completeResetPassword() に渡します。
ユーザーが 30 分以内にパスワード リセット メールの URL にアクセスしない場合、 tokenとtokenIdは期限切れになります。 パスワードのリセット プロセスを再度開始する必要があります。
EmailPasswordAuthProvider authProvider = EmailPasswordAuthProvider(app); await authProvider.completeResetPassword( "n3wSt0ngP4ssw0rd!", token, tokenId);
注意
パスワード リセットメールで送信された tokenとtokenId の値にアクセスするには、ディープリンクを含むカスタム パスワード リセットメールを使用できます。