Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

ユーザーの認証 - Flutter SDK

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

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

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

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

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

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

匿名認証プロバイダを使用すると、ユーザーは永続的な個人情報を保存しない短期間のアカウントでアプリケーションにログできます。匿名認証でログするには、Credentials.an Anonymous() を呼び出して匿名の認証情報を作成し、生成された認証情報を に渡します。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認証情報を使用してログインできます。

カスタム JWT認証を使用してログするには、JWT 文字列で Credentials.jwt() を呼び出して JWT 認証情報を作成します。次に、app.logIn に認証情報を渡します。

final token = await authenticateWithExternalSystem();
final jwtCredentials = Credentials.jwt(token);
final currentUser = await app.logIn(jwtCredentials);

API キー認証を有効にしている場合は、クライアントまたはサーバー API キーのいずれかを使用してログインできます。

APIキー認証を使用してログするには、 APIキー文字列 で Credentials.apiKey() を呼び出して ApiKey 認証情報を作成します。次に、app.logIn() に認証情報を渡します。

final apiKeyCredentials = Credentials.apiKey(myApiKey);
final apiKeyUser = await app.logIn(apiKeyCredentials);

認証情報で使用するサーバー API キーを生成するには、「 サーバー API キーの作成 」ドキュメントを参照してください。

現在ログインしているユーザーと同じ権限を持つユーザーAPIキーを操作するには、 ユーザー.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 ドキュメントの「ユーザー セッションの管理」を参照してください。

ログに使用された認証プロバイダに関係なく、 User.logOut() を使用すると、任意のユーザーをログできます。このメソッドです。

  • ローカルに保存されているユーザー認証情報をデバイスから削除します

  • ユーザーのRealmとの間の同期を直ちに停止します

ログアウトすると同期が停止するため、すべてのローカル Realm の更新がサーバーにアップロードされた後にのみログアウトする必要があります。

await user.logOut();

認証されたユーザーを作成したら、 App.currentUserプロパティを使用してユーザーオブジェクトを検索できます。 currentUserオブジェクトは ローカルストレージに保存されているため、 初期認証後にアプリがシャットダウンした場合でも、logIn を再度呼び出す必要はありません(ユーザーがログアウトした場合を除く)。

final user = app.currentUser;

戻る

ユーザーの管理

項目一覧