前提とやること
前提は、UserPools・登録ページを作成済みであること。
UserPoolsを使ったユーザ認証では、メールorSMS認証がデフォルトでは必須です。また、2017/01/06現在、コンソール上から認証を解除する方法は見当たりません。そこで今回は、メール・SMS認証無しでユーザ登録が完了し、ログインできる状態にしたいと思います。
概要
- Sign UpのタイミングでLambdaを起動
- autoConfirmを有効にする
やりかた
Lambdaの作成
UserPoolsと同じリージョンに下記処理が書かれたLambdaを作成します。Roleは特に何も必要ありません。
exports.handler = function(event, context, callback) {
if (event.triggerSource == 'PreSignUp_SignUp') {
event.response.autoConfirmUser = true;
}
callback(null, event);
}
UserPoolsの設定
該当のUserPoolsのTriggersを開きます。Pre sign-upのLambda Functionを上で作成したLambdaにします。これを設定することによって、登録ページで、登録ボタンが押された際に、このLambdaFunctionが呼ばれ、autoConfirmUserが有効に上書きされます。これをすると、ユーザに面倒な認証をして貰う必要がなくなります。
eventの中身はこんな感じです。この辺に応じて、メール・SMS認証をスキップするかどうかを判断してもいいかもしれません。
{
"version": "1",
"region": "us-east-1",
"userPoolId": "us-east-1_xxxxxxxxxx",
"userName": "xxxxxxxxxxx",
"callerContext": {
"awsSdkVersion": "aws-sdk-js-2.4.12",
"clientId": "xxxxxxxxxxxxxxxxxxx"
},
"triggerSource": "PreSignUp_SignUp",
"request": {
"userAttributes": {
"email": "your mail address"
},
"validationData": null
},
"response": {
"autoConfirmUser": false,
"autoVerifyEmail": false,
"autoVerifyPhone": false
}
}
注意点としては、登録時に認証コードが書かれたメールが送られていましたが、それは送られなくなります。よって、ユーザに登録されたことを通知したければ、別途LambdaFunctionにSES等を使ってメールを送る処理を書いていく必要があります。
おわり。