언리얼 엔진 - 게임 프로젝트/AWS GameLift를 활용한 데디케이트 FPS 프로젝트

Access Tokens - 1) 이메일 중복 방지 람다 트리거 생성

monstro 2026. 6. 13. 17:37
728x90
반응형

- 개요

AWS Cognito사용자 풀에서 제공하는 Amazon Cognito Identity Provider API를 사용하여

회원가입에 사용하는 이메일 주소중복으로 사용되는 것을 방지한다

 

- 절차

1) 람다 함수 선언 + Lambda 트리거와 연결 

Lambda 생성

 

위와 같이 이름을 구성하여 Lambda 함수를 생성한다

 

사용중인 사용자 풀 - 확장 기능 탭

 

AWS 콘솔에서 위와 같이 Lambda 트리거를 생성할 수 있다

Lambda 트리거는 사용자 가입, 로그인, 토큰 발급 등의 인증 작업이 발생할 때,

개발자가 작성한 AWS Lambda 코드를 실행할 수 있게 해주는 기능이다

 

실제 Lambda 함수와 Lambda 트리거 연동

 

해당 Lambda 트리거는 회원가입을 하는 경우 이메일중복으로 사용되었는지 체크한다

따라서 위와 같이 트리거 유형 가입로, 가입사전 가입 트리거로 설정한다

이후 연동할 Lambda 함수위에서 선언한 Lambda 함수로 연결한다

 

2) 정책 생성 및 람다 함수에 적용

정책 생성

 

선언한 람다에 적용할 정책을 설정한다

가입된 사용자를 조회해야 하므로 Cognito User Pools 서비스의 ListUsers 작업을 사용한다

또, 리소스 ARN을 사용중인 사용자 풀의 ARN으로 설정하여 해당 풀을 대상으로 작업을 수행하도록 정책을 설정한다

 

정책의 이름을 설정

 

생성한 정책의 이름을 위와 같이 설정한다

 

정책 연결

 

1)에서 생성한 람다 함수에 위와 같이 정책을 연결한다

 

3) 람다 함수 정의

환경 변수 생성

 

1)에서 생성한 람다 함수의 내부에서 사용할 환경 변수를 생성한다

환경 변수를 사용하여 리전을 지정한다

 

import { CognitoIdentityProviderClient, ListUsersCommand } from "@aws-sdk/client-cognito-identity-provider";

export const handler = async (event) => {
  const email = event.request.userAttributes.email;

  const cognitoIdentityProviderClient = new CognitoIdentityProviderClient( { region: process.env.REGION } );
  
  const listUsersInput = {
    UserPoolId: event.userPoolId,
    Filter: `email = "${email}"`
  };

  const listUsersCommand = new ListUsersCommand(listUsersInput);

  try {
    const listUsersResponse = await cognitoIdentityProviderClient.send(listUsersCommand);
    if (listUsersResponse.Users.length > 0) {
      throw new Error("A user with this email aleady exists.");
    }
    return event;
  } catch(error) {
    console.error(error);
    throw new Error(error.message);
  }
};

 

람다 함수의 코드를 위와 같이 구성하였다

  • email 변수를 사용하여 사용자가 입력한 이메일 주소를 저장
  • Cognito 서비스와 통신할 클라이언트 객체를 생성
  • 필터링 조건을 설정하여 입력한 이메일이 "이미 존재하는지" 판단하며 ListUsersCommand 커맨드를 수행
  • 중복된 메일이 없다event 값을 반환
  • 중복된 메일이 있다면 특정 문자열로 구성된 예외를 반환
  • 다른 문제가 발생했다면 해당 예외를 반환

 

- 최종 실행 결과

회원가입 람다 함수의 테스트 이벤트 수정

 

회원가입 람다 함수의 테스트 이벤트를 위와 같이 수정하여

사용자 이름은 다르게 설정하되, 이메일 주소는 이미 존재하는 사용자와 동일하도록 수정하였다

 

회원가입 람다 함수 실행 결과

 

회원가입 람다 함수의 실행 결과는 위와 같이 예외가 발생한 것을 확인할 수 있다

 

CloudWatch - CognitoPreSignUp_UniqueEmail 람다에 대한 로그

 

CloudWatch 탭에서 확인해보면 

CognitoPreSignUp_UniqueEmail 람다에서 의도한 예외가 발생한 것을 확인할 수 있다

728x90
반응형