LoginSignup
9
4

More than 5 years have passed since last update.

cognitoのSMS/Eメール認証で日本語を使う

Last updated at Posted at 2017-05-12

 Amazon Cognito のUserPoolsにおいてSMS/Eメール認証で日本語メッセージを送信する方法を記す。

背景

 アカウント作成や電話番号変更などの場合にSMSやEメールで認証コードを送信することができる。
デフォルトのメッセージは下記のような英語の文面。
Your verification code is {####}.
送信されるメッセージは設定画面のフォームで変更することができるが、Eメールの文面に日本語を入力すると正規表現エラーになってしまう。(2017/05/12時点)

対処方法

同じく設定画面で設定できるCustom messageトリガーには日本語に対する制限がないためこれで回避する。

Custom messageが扱うのはtriggerSourceが以下の場合。1

triggerSource 値 内容
CustomMessage_SignUp カスタムメッセージ - サインアップ後に確認コードを送信するため
CustomMessage_ResendCode カスタムメッセージ - 既存のユーザーに確認コードを再送するため
CustomMessage_ForgotPassword カスタムメッセージ - 忘れたパスワードのリクエスト用の確認コードを送信するため
CustomMessage_UpdateUserAttribute カスタムメッセージ - ユーザーの E メールまたは電話番号が変更されると、このトリガーは確認コードをそのユーザーに自動的に送信します。他の属性には使用できません。
CustomMessage_VerifyUserAttribute カスタムメッセージ – このトリガーは、ユーザーが手動で新しい E メールまたは電話番号をリクエストすると、ユーザーに認証コードを送信します。
CustomMessage_Authentication カスタムメッセージ - 認証時に MFA コードを送信するため

とりあえず日本語化したいだけなら以下のコードでlambdaを作って、
Triggersタブの[Custom message]にそのlambdaを指定すればいい。

(★2017/5/17追記。マネジメントコンソールのバグらしいです。sdkから実行しても解決できそうです。Cognito User Poolsでemail verification messageのメール送信を日本語で行う方法

python2.7のコード例

cognitoCustomMessage.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

def lambda_handler(event, context):
    codeType = 'コード種別'
    if event['triggerSource'] == 'CustomMessage_SignUp':
        codeType = 'アカウント認証用コード'
    if event['triggerSource'] == "CustomMessage_ResendCode":
        codeType = 'アカウント認証用コード(再送)'
    if event['triggerSource'] == "CustomMessage_ForgotPassword":
        codeType = 'パスワード再設定用コード'
    if event['triggerSource'] == "CustomMessage_UpdateUserAttribute":
        codeType = '電話番号もしくはメールアドレスの変更確認用コード'
    if event['triggerSource'] == 'CustomMessage_VerifyUserAttribute':
        codeType = '電話番号もしくはメールアドレスの登録確認用コード'
    if event['triggerSource'] == "CustomMessage_Authentication":
        codeType = 'MFA用コード'

    event['response']['smsMessage'] = '{n}さんの{t}は [ {c} ] です。'.format(
        n=event['userName'], t=codeType, c=event['request']['codeParameter'])
    event['response']['emailSubject'] = codeType
    event['response']['emailMessage'] = '{n}さんの{t}は [ {c} ] です。'.format(
        n=event['userName'], t=codeType, c=event['request']['codeParameter'])
    return event

CustomMessage_SignUpで'taro'さんが登録した場合の例
タイトル:アカウント認証用コード
本文:taroさんのアカウント認証用コードは[ 123456 ]です。

lambdaのeventは以下の形式が渡されるので、必要に応じてカスタムできる

新規登録時
{
  "userName": "taro",
  "userPoolId": "ap-northeast-1_XXXXXXXXX",
  "callerContext": {
    "awsSdkVersion": "aws-sdk-js-2.6.4",
    "clientId": "2mvlqpa6c4vi8ciu3uo7XXXXXX"
  },
  "region": "ap-northeast-1",
  "request": {
    "usernameParameter": null,
    "userAttributes": {
      "sub": "fb560XXX-XXXX-XXXX-XXXX-ae58e038XXXX",
      "email_verified": "false",
      "cognito:user_status": "UNCONFIRMED",
      "custom:comment": "コメント",
      "email": "hogehoge@example.com",
      "name": "taro"
    },
    "codeParameter": "{####}"
  },
  "triggerSource": "CustomMessage_SignUp",
  "version": "1",
  "response": {
    "emailMessage": null,
    "emailSubject": null,
    "smsMessage": null
  }
}
9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4