Close

aws-go-sdk를 이용하여 Cognito 회원가입 로그인 구현

aws-go-sdk를 이용하여 Cognito 회원가입 로그인 구현

소개

다른 언어(node, javascript, python 등)의 경우 aws sdk를 이용하여 cognito에 연동하는 자료는 많습니다.
하지만 Go언어의 경우 SDK는 있으나 문서가 불친절 하고, 샘플로 참조할 자료가 부족하여 어려움이 있어, 직접 함수를 하나씩 써보고 확인한 Cognito UserPool의 회원가입과 로그인 구현을 위한 중요한 부분을 정리해보았습니다.

패키지

import (
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/cognitoidentityprovider"
)

기본적으로 필수적인 패키지는 위와 같습니다.
세션을 제어하기 위한 aws/session 과 cognito를 사용하기 위한 service/cognitoidentityprovider 가 필요합니다.

세션 정의

제일 먼저 AWS의 세션을 정의해줍니다.

sess := session.Must(session.NewSession(&aws.Config{
Region: aws.String("ap-northeast-2"),
}))

svc := cognitoidentityprovider.New(sess)

회원가입

SignUpInput

회원가입을 위해서는 회원가입시 필요한 입력 데이터를 넣어 주어야 합니다.

paramsSignup := &cognitoidentityprovider.SignUpInput{
ClientId:aws.String("AWS_CLINET_ID"),
Password:aws.String("USER_PASSWORD"),
Username:aws.String("USER_NAME"),
UserAttributes: []*cognitoidentityprovider.AttributeType{
// 속성
{
Name:aws.String("nickname"),
Value:aws.String("USER_NICKNAME"),
},
// 커스텀 속성
{
Name:aws.String("custom:id"),
Value:aws.String("USER_CUSTON_ATTRIBUTE_ID"),
},
},
}

SignUp

위의 SignUpInput에 유저 데이터를 입력했다면, 이제는 유저 데이터를 Cognito User Pool에 추가해 줍니다.

resp, err := svc.SignUp(paramsSignup)
if err != nil {
fmt.Println(err.Error())
return
}
log.Info("회원가입: ", resp)

Cognito 를 만들때 이메일 인증 사용하였다면 회원가입시 가입한 이메일로 인증코드(or 링크)가 발송됩니다. 해당링크를 사용하여 이메일을 인증 받아야 로그인이 가능합니다.
users.png
confirmed.png

결과

signup.png

로그인

InitiateAuthInput

앞서 구현하였던 회원가입과 동일하게 먼저 Input에 대한 값을 넣어줍니다.

paramsLogin := &cognitoidentityprovider.InitiateAuthInput{
AuthFlow: aws.String("USER_PASSWORD_AUTH"),
AuthParameters: map[string]*string{
"USERNAME": aws.String("USER_NAME"),
"PASSWORD": aws.String("USER_PASSWORD"),
},
ClientId: aws.String(config.ClientID),
}

InitiateAuth

앞서 Input값을 가지고 로그인을 진행합니다.
이 후 세션값을 반환받습니다.

res, err := svc.InitiateAuth(paramsLogin)
if err != nil {
fmt.Println(err.Error())
}

결과

login.png

Leave a Reply

avatar
  Subscribe  
Notify of
%d 블로거가 이것을 좋아합니다: