実装方法

Cognito User Pool を使用するためのユーティリティクラスの例を示します。このクラスは、AWS SDK の boto3 を使用して Cognito User Pool とのインタラクションを簡素化します。

import boto3

class CognitoUtils:
    def __init__(self, user_pool_id, client_id):
        self.user_pool_id = user_pool_id
        self.client_id = client_id
        self.cognito_client = boto3.client('cognito-idp')

    def sign_up_user(self, username, password, attributes=None):
        user_attributes = [
            {'Name': attr_name, 'Value': attr_value}
            for attr_name, attr_value in attributes.items()
        ] if attributes else []

        response = self.cognito_client.sign_up(
            ClientId=self.client_id,
            Username=username,
            Password=password,
            UserAttributes=user_attributes
        )

        return response

    def confirm_sign_up(self, username, confirmation_code):
        response = self.cognito_client.confirm_sign_up(
            ClientId=self.client_id,
            Username=username,
            ConfirmationCode=confirmation_code
        )

        return response

    def initiate_auth(self, username, password):
        response = self.cognito_client.initiate_auth(
            ClientId=self.client_id,
            AuthFlow='USER_PASSWORD_AUTH',
            AuthParameters={
                'USERNAME': username,
                'PASSWORD': password
            }
        )

        return response

上記の例では、CognitoUtilsというクラスが定義されています。このクラスは Cognito User Pool との操作をラップしています。

以下のメソッドが提供されています:

  • sign_up_user: ユーザーのサインアップを行います。ユーザー名、パスワード、およびオプションの属性情報を受け取ります。
  • confirm_sign_up: ユーザーのサインアップ確認を行います。ユーザー名と確認コードを受け取ります。
  • initiate_auth: ユーザーの認証を開始します。ユーザー名とパスワードを受け取ります。

これらのメソッドを使用するには、CognitoUtils クラスのインスタンスを作成し、必要なメソッドを呼び出します。
例えば、以下のような使い方ができます:

def lambda_handler(event, context):
    user_pool_id = 'your-user-pool-id'
    client_id = 'your-client-id'

    cognito_utils = CognitoUtils(user_pool_id, client_id)

    # ユーザーのサインアップ
    response = cognito_utils.sign_up_user(
        username='user@example.com',
        password='password',
        attributes={
            'given_name': 'John',
            'family_name': 'Doe'
        }
    )

    # サインアップ確認
    confirmation_code = '123456'
    confirm_response = cognito_utils.confirm_sign_up(
        username='user@example.com',
        confirmation_code=confirmation_code
    )

    # ユーザーの認証
    auth_response = cognito_utils.initiate

参考