Atlas App Services は、有効になっている任意の認証プロバイダを使用してユーザーを認証するためのAPIを提供します。 認証情報 オブジェクトをインスタンス化し、それを App.logIn() に渡して、そのユーザーのユーザーオブジェクトを認証および作成します。各認証プロバイダは、その認証プロバイダの オブジェクトをインスタンス化するために使用される静的コンストラクタCredentials
メソッドに対応します。
始める前に
1 つ以上の App Services認証プロバイダを有効にして構成します。
新しいユーザー アカウントの登録
Realm は、認証プロバイダーに応じて異なる方法でアカウントを登録します。
匿名ユーザーを登録する必要はありません。
メール/パスワードユーザーを登録するには、「メール/パスワードユーザーの登録 」を参照してください。
Google、 Facebook 、Apple、またはカスタムJSON web token認証を使用している場合、登録はこれらのサードパーティ サービスによって処理されます。
ログイン
成功した場合、 app.logIn
はUser
オブジェクトを返します。
匿名ユーザー
匿名認証プロバイダを使用すると、ユーザーは永続的な個人情報を保存しない短期間のアカウントでアプリケーションにログできます。匿名認証でログするには、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認証プロバイダを設定した場合は、外部認証プロバイダからの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キー認証を使用してログするには、 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認証でログするには、 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 ドキュメントの「ユーザー セッションの管理」を参照してください。
ユーザーのログアウト
ログに使用された認証プロバイダに関係なく、 User.logOut() を使用すると、任意のユーザーをログできます。このメソッドです。
ローカルに保存されているユーザー認証情報をデバイスから削除します
ユーザーのRealmとの間の同期を直ちに停止します
ログアウトすると同期が停止するため、すべてのローカル Realm の更新がサーバーにアップロードされた後にのみログアウトする必要があります。
await user.logOut();
現在のユーザーを取得
認証されたユーザーを作成したら、 App.currentUserプロパティを使用してユーザーオブジェクトを検索できます。 currentUser
オブジェクトは ローカルストレージに保存されているため、 初期認証後にアプリがシャットダウンした場合でも、logIn
を再度呼び出す必要はありません(ユーザーがログアウトした場合を除く)。
final user = app.currentUser;