Cognito 사용자 풀에서 보내는 메일 사용자 지정
8092 단어 파이썬cognitoserverlessAWS
Cognito의 기본 설정이라면 이런 메일이 도착합니다.
Your confirmation code is 927173
Your username is xxxx and temporary password is xxxxxx.
이 메일 제목, 본문을 사용자 정의하는 방법입니다.
맞춤 메시지를 설정할 수 있는 이벤트
공식 문서에서 발췌한 것입니다.
다음은 맞춤 메시지가 설정할 수 있는 이벤트 목록입니다.
AWS Lambda 트리거 요청 및 응답 파라미터
triggerSource 값
트리거 이벤트
CustomMessage_AdminCreateUser
사용자 지정 메시지 – 새 사용자에게 임시 암호를 보내기 위해.
CustomMessage_ResendCode
맞춤 메시지 – 기존 사용자에게 확인 코드를 다시 보내기 위해.
CustomMessage_ForgotPassword
맞춤 메시지 - 잊어 버린 암호 요청에 대한 확인 코드를 보내기 위해.
CustomMessage_UpdateUserAttribute
사용자 지정 메시지 - 사용자의 이메일 또는 전화 번호가 변경되면 이 트리거는 인증 코드를 해당 사용자에게 자동으로 보냅니다. 다른 속성에는 사용할 수 없습니다.
CustomMessage_VerifyUserAttribute
사용자 지정 메시지 - 사용자가 수동으로 새 이메일 및 전화 번호의 인증 코드를 요청하면이 트리거는 사용자에게 인증 코드를 보냅니다.
CustomMessage_Authentication
맞춤 메시지 - 인증시 MFA 코드를 보내기 위해.
이번에는 triggerSource 값이 CustomMessage_AdminCreateUser의 경우 사용자 정의를 예로 합니다.
절차
1. Lambda 함수 만들기
Python3.6의 예입니다.
기능의 IAM 역할은 Cloudwatch 로깅 권한만 부여하면 됩니다. 다음 IAM 정책의 예입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"*"
],
"Effect": "Allow"
}
]
}
Lambda 함수로 받는 이벤트를 로그 출력하면 이런 느낌.
{
"version": "1",
"region": "ap-northeast-1",
"userPoolId": "ap-northeast-1_xxxxxxxxx",
"userName": "hogee",
"callerContext": {
"awsSdkVersion": "aws-sdk-js-2.176.0",
"clientId": "CLIENT_ID_NOT_APPLICABLE"
},
"triggerSource": "CustomMessage_AdminCreateUser",
"request": {
"userAttributes": {
"sub": "bf6e9c66-0a69-476e-bfd8-724d38e6555f",
"cognito:email_alias": "[email protected]",
"email_verified": "True",
"cognito:user_status": "FORCE_CHANGE_PASSWORD",
"name": "hoge",
"email": "[email protected]"
},
"codeParameter": "{####}",
"usernameParameter": "{username}"
},
"response": {
"smsMessage": "None",
"emailMessage": "None", # ここをカスタムした本文に変える
"emailSubject": "None" # ここをカスタムしたタイトルに変える
}
}
이 이벤트를 그대로 return event
로 하면(자) 디폴트 설정이 적용된 메일이 보내집니다. 사용자 정의하려면 response
필드를 사용자 정의하려는 내용으로 다시 작성하고 리턴하십시오.
cognito_custom_message.py# -*- coding:utf-8 -*-
def handler(event, context):
if event['triggerSource'] == 'CustomMessage_AdminCreateUser':
customed_event = custom_message_admin_create_user(event)
return customed_event
def custom_message_admin_create_user(event):
email_message = '''
{username} 様
<br>
<br>
管理者から招待されました。
<br>
<br>
ログインメールアドレス:{mail}
<br>
初回ログインパスワード:{password}
'''.format(username='{username}',
mail=event['request']['userAttributes']['email'],
password='{####}')
event['response']['emailSubject'] = '仮パスワード発行のお知らせ'
event['response']['emailMessage'] = email_message
return event
{username}
에 사용자 이름, {####}
에 암호가 포함되어 메일이 전송됩니다.
triggerSource에 따라 본문에 포함해야 하는 코드 매개변수는 다르므로 방금 전 공식 문서에서 확인하십시오.
triggerSource가 CustomMessage_AdminCreateUser
이면 메시지 본문에 {username}
와 {####}
가 없으면 오류가 발생합니다.
추가로 사용자 정의 메시지 이벤트를 처리하려는 경우 handler()
elif event['triggerSource'] == 'CustomMessage_ForgotPassword':
customed_event = custom_message_forgot_password(event)
그렇게하면 대응할 수 있습니다.
2. Cognito 사용자 풀에 1.에서 만든 함수를 등록
Lambda 함수를 만든 후 Cognito 사용자 풀의 콘솔로 이동하여 트리거 → 사용자 지정 메시지에서 만든 Lambda 함수를 지정합니다.
serverless framework에서는 이렇게 됩니다.
serverless.yml<略>
functions:
cognitoCustomMessage:
handler: functions/cognito_custom_message.handler
role: CognitoCustomMessageRole
events:
- cognitoUserPool:
pool: UserPool
trigger: CustomMessage
resources:
Resources:
CognitoUserPoolUserPool:
<以下略>
설정 후 애플리케이션에서 사용자를 등록해 보면,
맞춤형 이메일이 도착했습니다.
이상입니다.
Reference
이 문제에 관하여(Cognito 사용자 풀에서 보내는 메일 사용자 지정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ykarakita/items/2797a94b6d9b2753b834
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"*"
],
"Effect": "Allow"
}
]
}
{
"version": "1",
"region": "ap-northeast-1",
"userPoolId": "ap-northeast-1_xxxxxxxxx",
"userName": "hogee",
"callerContext": {
"awsSdkVersion": "aws-sdk-js-2.176.0",
"clientId": "CLIENT_ID_NOT_APPLICABLE"
},
"triggerSource": "CustomMessage_AdminCreateUser",
"request": {
"userAttributes": {
"sub": "bf6e9c66-0a69-476e-bfd8-724d38e6555f",
"cognito:email_alias": "[email protected]",
"email_verified": "True",
"cognito:user_status": "FORCE_CHANGE_PASSWORD",
"name": "hoge",
"email": "[email protected]"
},
"codeParameter": "{####}",
"usernameParameter": "{username}"
},
"response": {
"smsMessage": "None",
"emailMessage": "None", # ここをカスタムした本文に変える
"emailSubject": "None" # ここをカスタムしたタイトルに変える
}
}
# -*- coding:utf-8 -*-
def handler(event, context):
if event['triggerSource'] == 'CustomMessage_AdminCreateUser':
customed_event = custom_message_admin_create_user(event)
return customed_event
def custom_message_admin_create_user(event):
email_message = '''
{username} 様
<br>
<br>
管理者から招待されました。
<br>
<br>
ログインメールアドレス:{mail}
<br>
初回ログインパスワード:{password}
'''.format(username='{username}',
mail=event['request']['userAttributes']['email'],
password='{####}')
event['response']['emailSubject'] = '仮パスワード発行のお知らせ'
event['response']['emailMessage'] = email_message
return event
elif event['triggerSource'] == 'CustomMessage_ForgotPassword':
customed_event = custom_message_forgot_password(event)
Lambda 함수를 만든 후 Cognito 사용자 풀의 콘솔로 이동하여 트리거 → 사용자 지정 메시지에서 만든 Lambda 함수를 지정합니다.
serverless framework에서는 이렇게 됩니다.
serverless.yml
<略>
functions:
cognitoCustomMessage:
handler: functions/cognito_custom_message.handler
role: CognitoCustomMessageRole
events:
- cognitoUserPool:
pool: UserPool
trigger: CustomMessage
resources:
Resources:
CognitoUserPoolUserPool:
<以下略>
설정 후 애플리케이션에서 사용자를 등록해 보면,
맞춤형 이메일이 도착했습니다.
이상입니다.
Reference
이 문제에 관하여(Cognito 사용자 풀에서 보내는 메일 사용자 지정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ykarakita/items/2797a94b6d9b2753b834텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)