Cognitoでユーザーのセッション状態を確認する
try {
// Amplify プラグインの追加と初期化
Amplify.addPlugin(new AWSCognitoAuthPlugin());
Amplify.configure(getApplicationContext());
Log.i("MyAmplifyApp", "Initialized Amplify");
// ログイン状態の確認
Amplify.Auth.fetchAuthSession(
result -> Log.i("AmplifyQuickstart", result.toString()),
error -> Log.e("AmplifyQuickstart", error.toString())
);
} catch (AmplifyException error) {
Log.e("MyAmplifyApp", "Could not initialize Amplify", error);
}
細かく見ていく
- Amplify プラグインの追加と初期化
Amplify.addPlugin(new AWSCognitoAuthPlugin());
Amplify.configure(getApplicationContext());
Log.i("MyAmplifyApp", "Initialized Amplify");
AWS Amplify ライブラリに Auth プラグイン(AWS Cognito 認証プラグイン)を追加し、Amplify を初期化する。
Amplify.configure()
メソッドは、Amplify ライブラリの初期化を行う。
まず、この処理をしていないと認証処理を実行するところでエラーになる。
- ログイン状態の確認
Amplify.Auth.fetchAuthSession(
result -> Log.i("AmplifyQuickstart", result.toString()),
error -> Log.e("AmplifyQuickstart", error.toString())
);
fetchAuthSession()
メソッドは、現在のユーザーセッションの状態を取得する。
成功した場合、result
オブジェクトにセッション情報が含まれる。
エラーが発生した場合は、error
オブジェクトにエラー情報が含まれる。
- エラーハンドリング
} catch (AmplifyException error) {
Log.e("MyAmplifyApp", "Could not initialize Amplify", error);
}
Amplify ライブラリの初期化中にエラーが発生した場合、AmplifyException がスローされ、その詳細をログに出力する。
セッション状態から認証済みユーザーのidTokenを取得する
Amplify.Auth.fetchAuthSession(
// ユーザーセッションの取得が成功した場合の処理
result -> {
AWSCognitoAuthSession cognitoAuthSession = (AWSCognitoAuthSession) sessionResult;
switch (cognitoAuthSession.getUserPoolTokensResult().getType()) {
case SUCCESS:
// ユーザーセッションの取得に成功した場合
assert cognitoAuthSession.getUserPoolTokensResult().getValue() != null;
String idToken = cognitoAuthSession.getUserPoolTokensResult().getValue().getIdToken();
// idTokenを使用した処理
break;
case FAILURE:
// ユーザーセッションの取得に失敗した場合
// エラー処理
break;
}
},
error -> // エラー処理
);
細かく見ていく
- セッションの状態を確認する
result -> {
AWSCognitoAuthSession cognitoAuthSession = (AWSCognitoAuthSession) sessionResult;
switch (cognitoAuthSession.getUserPoolTokensResult().getType()) {
result
パラメータは、ユーザーセッションの情報を含むオブジェクト。
このオブジェクトをキャストして AWSCognitoAuthSession
オブジェクトに変換する。
次に、cognitoAuthSession.getUserPoolTokensResult().getType()
を使用してセッションの状態を確認することができる。
- ID トークンを取得
case SUCCESS:
// ユーザーセッションの取得に成功した場合
assert cognitoAuthSession.getUserPoolTokensResult().getValue() != null;
String idToken = cognitoAuthSession.getUserPoolTokensResult().getValue().getIdToken();
// idTokenを使用した処理
break;
ユーザーセッションの取得が成功(case SUCCESS
)した場合、
cognitoAuthSession.getUserPoolTokensResult().getValue().getIdToken()
を使用して ID トークンが取得できる。
これは、認証済みユーザーの識別子。
取得した ID トークンを使用した処理を実装したい時はこうやって取得する。
おわりに
AndroidアプリでCognitoを使用した際にidToken
の取得に手こずったのでメモを残してみました。
Cognitoのユーザープールの設定とかアプリとの紐付けとかでも大変苦戦したので、AWS Cognitoのセットアップの記事も今後書きたいと思ってます!
認証機能がんばるぞい!