#8 BE 세팅(cognito) 적용 -2 SignUp

또여·2022년 11월 3일
0

사업아이템

목록 보기
8/11

앞서서 세팅을 해주고 코드에는 어떻게 적용을 하는가

build.gradle

dependencies {
 ...생략

  //aws
  implementation platform('com.amazonaws:aws-java-sdk-bom:1.12.154')
  implementation 'com.amazonaws:aws-java-sdk-core'
  implementation 'com.amazonaws:aws-java-sdk-cognitoidp'
  implementation 'com.amazonaws:aws-java-sdk-s3'
}

추가하는김에 s3도 추가했다

application.yml

cloud:
  aws:
    region: us-east-2
    cognito:
      endpoint: cognito-idp.us-east-2.amazonaws.com
      user-pool-id: us-east-2_2zVVzRPPW

이렇게만 세팅했고, userRestController에서 호출을 하도록 구성해봄

UserController.java

    @PostMapping("/signUp")
    public ResponseEntity<UserResponseDTO> signUp() throws Exception {
        SignUpRequestDTO signUpRequestDTO = 
            SignUpRequestDTO.builder()
            .emailAddress("test@example.com")
            .password("1234")
            .build();
        userService.signUp(signUpRequestDTO);
        return ResponseEntity.ok(null);
    } 

UserServiceImpl.java
에는 아래처럼 대충 호출해서 생성이 되는지만 확인하려고함

@Override
    public SignUpResponseDTO signUp(SignUpRequestDTO signUpRequestDTO)throws Exception {
        final String emailAddress = signUpRequestDTO.getEmailAddress();
        final String password = signUpRequestDTO.getPassword();
        final String nickName = signUpRequestDTO.getNickname();
        final String snsType = signUpRequestDTO.getSnsType();

        AwsCognitoUserDTO awsCognitoUserDTO =
                AwsCognitoUserDTO.ByEmailAddressPasswordBuilder()
                        .emailAddress(emailAddress)
                        .password(password)
                        .build();
        // nickName 중복체크

        // 코그니토 호출
        AwsCognitoUserDTO awsCognitoUserResultDTO =
                awsCognitoService.signUpCognito(awsCognitoUserDTO);

        return null;
    }

AwsCognitoServiceImpl.java

우선 이런식으로 코그니토 클라이언트라는 객체를 통해 계정을 생성하고, 로그인하고 그런다

import com.amazonaws.services.cognitoidp.AWSCognitoIdentityProvider;
import com.amazonaws.services.cognitoidp.AWSCognitoIdentityProviderClientBuilder;
import com.amazonaws.services.cognitoidp.model.AdminCreateUserRequest;
import com.amazonaws.services.cognitoidp.model.AdminCreateUserResult;
import com.amazonaws.services.cognitoidp.model.AdminSetUserPasswordRequest;
import com.amazonaws.services.cognitoidp.model.AttributeType;
import com.amazonaws.services.cognitoidp.model.UserType;
import com.example.heth.sample.dto.aws.AwsCognitoUserDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@RequiredArgsConstructor
@Service
public class AwsCognitoServiceImpl implements AwsCognitoService {
    @Value("${cloud.aws.region}")
    private String region;

    @Value("${cloud.aws.cognito.user-pool-id}")
    private String userPoolId;

    @Override
    public AWSCognitoIdentityProvider getCognitoClient() {
        return AWSCognitoIdentityProviderClientBuilder.standard().withRegion(region).build();
    }

    @Override
    public AwsCognitoUserDTO signUpCognito(AwsCognitoUserDTO awsCognitoUserDTO) throws Exception {
        AWSCognitoIdentityProvider cognitoClient = getCognitoClient();

        AdminCreateUserRequest createUserRequest =
                new AdminCreateUserRequest()
                        .withUserPoolId(userPoolId)
                        .withUsername(awsCognitoUserDTO.getNickName())
                        .withUserAttributes(
                                new AttributeType()
                                        .withName("email")
                                        .withValue(awsCognitoUserDTO.getEmailAddress()));
        AdminCreateUserResult createUserResult = cognitoClient.adminCreateUser(createUserRequest);

        AdminSetUserPasswordRequest setPasswordRequest =
                new AdminSetUserPasswordRequest()
                        .withUsername(awsCognitoUserDTO.getNickName())
                        .withPassword(awsCognitoUserDTO.getPassword())
                        .withPermanent(true)
                        .withUserPoolId(userPoolId);
        cognitoClient.adminSetUserPassword(setPasswordRequest);

        UserType cognitoUser = createUserResult.getUser();
        cognitoClient.shutdown();
        return AwsCognitoUserDTO.ByNameBuilder().name(cognitoUser.getUsername()).build();
    }
}

이렇게하고 postman으로 샘플로 테스트를 해보니..

생성이 잘 되었다....

이제 생성된 상태로 로그인을 시도해본다!

profile
기록 열심히하는 개발자인척

0개의 댓글