앞서서 세팅을 해주고 코드에는 어떻게 적용을 하는가
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으로 샘플로 테스트를 해보니..
생성이 잘 되었다....
이제 생성된 상태로 로그인을 시도해본다!