AWS Cognitoでユーザ作成時に手間のかかる承認処理を自動で処理するには

AWS Cognitoとは

AWSでユーザ管理、フェデレーションなどを簡単に実施可能なとても便利なサービスです。
ID連携とかもできるので、今後も色々利用していきたいです。

マネジメントコンソールでのユーザ管理

ユーザ作成、インポート、パスワードリセットなど、基本的なことは
AWSのマネジメントコンソールで実施可能です。
但し、使用可能なユーザをすぐに作成するには、少しステップが必要です。

ユーザの承認

Cognitoのユーザは、以下に記載のとおり、ステータスを持ちます。
https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/signing-up-users-in-your-app.html

マネジメントコンソールでユーザを作成した場合、ここでいう
"Registered(cannot sign in)"
の状態になります。

Cognitoにサインインできるようにするには、いずれかが必要です。
1.Email/TELによる承認
2.管理者による承認
3.LambdaでPreSignupイベントをトリガーとして承認

はい、ということでタイトルにつながります。
「3」を実施することで、マネジメントコンソールでユーザ作成すると同時に、
サインインが可能とすることができます。

どういうことか

マネジメントコンソールでユーザが作成されると、"Pre-Signup"イベントが発生します。
そのイベントをトリガーに、Lambdaが実行されるようにします。
(Cognitoのユーザ作成処理をフックするイメージです)

そして、Lambdaでユーザの承認ステータスを変更することで、
Cognitoはユーザが承認されたと判断し、ユーザがすぐ利用できるようになる、ということです。

Lambdaを作る

では、Lambdaを作ります。
Cognitoで作成されたユーザのイベントデータを変更し、Cognitoに返してやります。

var AWS = require('aws-sdk');
exports.handler = (event, context, callback) => {
    var confirm = {
        "autoConfirmUser": true, // 承認ステータス変更
        "autoVerifyEmail": true  // Emailを検証済みとする
    };
    event.response = confirm;
    context.done(null, event);
};

承認ステータスだけでもOKです。
Emailとかも一緒に検証済みにしてしまいたい場合は、一緒にできます。

Cognitoイベントに設定する

Cognitoのユーザープール内で「トリガー」-「サインアップ前」を確認し、
先ほど作成したLambdaを選択します。

以上でOKです。簡単ですね。
これで、Cognitoのユーザ管理が楽になりました。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.