ユーザーの認証 - Flutter SDK
項目一覧
Atlas App Services は、有効になっている任意の認証プロバイダを使用してユーザーを認証するためのAPIを提供します。 認証情報 のインスタンス化 オブジェクトを作成し、それを App.logIn() に渡す: ユーザー の認証と作成 そのユーザーのオブジェクト。各認証プロバイダは、その認証プロバイダの オブジェクトをインスタンス化するために使用される静的コンストラクタCredentials
メソッドに対応します。
始める前に
1 つ以上の App Services認証プロバイダを有効にして構成します。
新しいユーザー アカウントの登録
Realm は、認証プロバイダーに応じて異なる方法でアカウントを登録します。
匿名ユーザーを登録する必要はありません。
メール/パスワードユーザーを登録するには、「メール/パスワードユーザーの登録 」を参照してください。
Google、 Facebook 、Apple、またはカスタムJSON web token認証を使用している場合、登録はこれらのサードパーティ サービスによって処理されます。
ログイン
成功した場合、 app.logIn
はUser
オブジェクトを返します。
匿名ユーザー
匿名認証プロバイダーを使用すると、ユーザーは永続的な個人情報を保存しない短期間のアカウントでアプリケーションにログインできます。 匿名認証でログインするには、 Credentials.an以降() を呼び出して匿名の認証情報を作成します。生成された認証情報をapp.logIn
に渡します。
final anonCredentials = Credentials.anonymous(); await app.logIn(anonCredentials);
複数の匿名ユーザーが必要な場合は、追加の匿名認証情報を作成するときにreuseCredentials: false
を設定します。
final anonUser = await app.logIn(Credentials.anonymous()); final otherAnonUser = await app.logIn(Credentials.anonymous(reuseCredentials: false));
メール/パスワード ユーザー
メール/パスワード認証プロバイダーは、ユーザーがメール ユーザー名とパスワードを使用してアプリケーションにログインすることを可能にします。 メール/パスワード認証でログインするには、 Credentials.emailPassword() を呼び出してメール/パスワードの認証情報を作成します。。ユーザーのメールとパスワード。 次に、認証情報をapp.logIn
に渡します。
final emailPwCredentials = Credentials.emailPassword("lisa@example.com", "myStr0ngPassw0rd"); await app.logIn(emailPwCredentials);
App Services のメール/パスワード認証の使用に関する完全なフローについて詳しくは、「メール/パスワード ユーザー 」を参照してください。
カスタムJSON web tokenユーザー
カスタムJSON web token認証プロバイダを設定した場合は、外部認証プロバイダからのJSON web token認証情報を使用してログインできます。
JSON web tokenカスタム 認証を使用してログインするには、JSON web token Credentials.jwt() を呼び出して の認証情報を作成します。( JSON web token string )。 次に、認証情報をapp.logIn
に渡します。
final token = await authenticateWithExternalSystem(); final jwtCredentials = Credentials.jwt(token); final currentUser = await app.logIn(jwtCredentials);
API キー ユーザー
API キー認証を有効にしている場合は、クライアントまたはサーバー API キーのいずれかを使用してログインできます。
API キー認証を使用してログインするには、 ApiKey を作成します 認証 情報.apiKey() 呼び出しによる認証情報API キー string の場合 Then pass the credential to app.logIn()
.
final apiKeyCredentials = Credentials.apiKey(myApiKey); final apiKeyUser = await app.logIn(apiKeyCredentials);
認証情報で使用するサーバー API キーを生成するには、「 サーバー API キーの作成 」ドキュメントを参照してください。
現在ログインしているユーザーと同じ権限を持つユーザー API キーを操作するには、 Use.apiKeys クライアント。ユーザー API キーの作成、取得、削除、無効化、有効化ができます。
// Create user API key final apiKey = await user.apiKeys.create("api-key-name"); // Get existing user API key by ID // Returns `null` if no existing API key for the ID final refetchedApiKey = await user.apiKeys.fetch(apiKey.id); // Get all API keys for a user final apiKeys = await user.apiKeys.fetchAll(); // Disable API key await user.apiKeys.disable(apiKey.id); // Check if API key is enabled print(apiKey.isEnabled); // prints `false` // Enable API key await user.apiKeys.enable(apiKey.id); // Delete a user API key await user.apiKeys.delete(apiKey.id);
カスタム関数ユーザー
カスタム関数認証プロバイダーを設定した 場合は、Atlas Functionによって処理されるカスタム認証ロジックを使用してログインできます。
カスタム関数認証を使用してログインするには、カスタム引数を含む文字列化された JSON を Credentials.function() に渡します。 。次に、認証情報をapp.logIn
に渡します。
final credentials = { "username": "someUsername", }; // payload must be a JSON-encoded string final payload = jsonEncode(credentials); final customCredentials = Credentials.function(payload); final currentUser = await app.logIn(customCredentials);
Facebook ユーザー
Facebook 認証プロバイダーを設定している 場合は、既存の Facebook アカウントを使用してログインできます。
Facebook 認証でログインするには、Facebook アクセス トークンを Credentials.Facebook() に渡します 。次に、認証情報をapp.logIn
に渡します。
final facebookCredentials = Credentials.facebook(accessToken); final currentUser = await app.logIn(facebookCredentials);
重要
Facebook プロファイル画像 URL を保存しないでください
Facebook のプロファイル画像 URL には、画像の使用許可を付与するためのユーザーのアクセス トークンが含まれます。 セキュリティを確保するために、ユーザーのアクセストークンを含む URL を保存しないでください。 代わりに、画像を取得する必要がある場合は、ユーザーのメタデータ フィールドから URL に直接アクセスします。
Google ユーザー
Google 認証プロバイダーを設定している場合は、既存の Google アカウントを使用してログインできます。
Google 認証コードを使用してログインするには、Google 認証コードを Credentials.googleAuthCode() 。次に、認証情報をapp.logIn
に渡します。
final googleAuthCodeCredentials = Credentials.googleAuthCode(authCode); final currentUser = await app.logIn(googleAuthCodeCredentials);
Google ID トークンを使用してログインするには、Google ID トークンを Credentials.googleIdToken() に渡します 。次に、認証情報をapp.logIn
に渡します。
final googleIdTokenCredentials = Credentials.googleIdToken(idToken); final currentUser = await app.logIn(googleIdTokenCredentials);
Apple ユーザー
Sign in with Apple 認証プロバイダー を設定している場合は、既存の Apple アカウントを使用してログインできます。
Apple 認証でログインするには、Apple アクセス トークンを Credentials.apple() に渡します 。次に、認証情報をapp.logIn
に渡します。
final appleCredentials = Credentials.apple(idToken); final currentUser = await app.logIn(appleCredentials);
Tip
Login failed
というエラーが発生した場合は、 のtoken contains
an invalid number of segments
UTF-8string でエンコードされたJSON web token バージョンを渡していることを確認してください。
リフレッシュ トークンの有効期限
リフレッシュ トークンは一定期間後に期限切れになります。 更新トークンの有効期限が切れると、アクセス トークンの更新ができなくなり、ユーザーは再度ログインする必要があります。
Realm が開いた後に更新トークンの有効期限が切れると、ユーザーが再度ログインするまでデバイスは同期できなくなります。 同期エラー ハンドラーには、同期試行時にトークンの期限切れエラーを検出し、ユーザーをログイン フローにリダイレクトするロジックを実装する必要があります。
リフレッシュ トークンの有効期限の設定の詳細については、App Services ドキュメントの「ユーザー セッションの管理」を参照してください。
ユーザーのログアウト
ログインに使用された認証プロバイダに関係なく、 Use.logOut() を使用すると、任意のユーザーをログアウトできます 。このメソッドです。
ローカルに保存されているユーザー認証情報をデバイスから削除します
ユーザーのRealmとの間の同期を直ちに停止します
ログアウトすると同期が停止するため、すべてのローカル Realm の更新がサーバーにアップロードされた後にのみログアウトする必要があります。
await user.logOut();
現在のユーザーを取得
認証済みユーザーが作成されたら、 App.currentUser を使用してユーザー オブジェクトを検索できます。 プロパティ。currentUser
オブジェクトはローカル ストレージに保存されているため、初期認証後にアプリがシャットダウンした場合でも、 logIn
を再度呼び出す必要はありません(ユーザーがログアウトした場合を除く)。
final user = app.currentUser;