Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

ユーザーの認証 - Flutter SDK

項目一覧

  • 始める前に
  • 新しいユーザー アカウントの登録
  • ログイン
  • 匿名ユーザー
  • メール/パスワード ユーザー
  • カスタムJSON web tokenユーザー
  • API キー ユーザー
  • カスタム関数ユーザー
  • Facebook ユーザー
  • Google ユーザー
  • Apple ユーザー
  • リフレッシュ トークンの有効期限
  • ユーザーのログアウト
  • 現在のユーザーを取得

Atlas App Services は、有効になっている任意の認証プロバイダを使用してユーザーを認証するためのAPIを提供します。 認証情報 のインスタンス化 オブジェクトを作成し、それを App.logIn() に渡す: ユーザー の認証と作成 そのユーザーのオブジェクト。各認証プロバイダは、その認証プロバイダの オブジェクトをインスタンス化するために使用される静的コンストラクタCredentials メソッドに対応します。

  1. App Services Appを作成します。

  2. 1 つ以上の App Services認証プロバイダを有効にして構成します。

Realm は、認証プロバイダーに応じて異なる方法でアカウントを登録します。

App.logIn() を使用してユーザーを認証できます。

成功した場合、 app.logInUserオブジェクトを返します。

匿名認証プロバイダーを使用すると、ユーザーは永続的な個人情報を保存しない短期間のアカウントでアプリケーションにログインできます。 匿名認証でログインするには、 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 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 キー認証を使用してログインするには、 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 アクセス トークンを 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 認証コードを 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);

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;

戻る

ユーザーの管理