기존 회원가입,로그인 서비스에 소셜로그인 합치기

2024. 7. 27. 10:41TIL

 

오늘의 진행상황

 

소셜 로그인용 dto 추가

package sparta.nbcamp.wachu.domain.member.dto

data class SocialSignUpRequest(
    val nickname: String, // nickname을 넣은 이유는 동일한 소셜로그인으로 회원가입한 유저의 nickname이 기존 서비스 회원의 nickname과 중복됬을 경우를 고려했기 때문 
    val email: String,
)

 

 

service 추가

fun socialLogin(request: OAuthResponse): TokenResponse {

    val loginMember = memberRepository.findByProviderAndProviderId(request.provider, request.providerId)
        ?: throw IllegalStateException("회원가입이 아직 되지않음") // TODO() 바로 SocailSignUp()으로 넘어가게하기??
    return TokenResponse(
        accessToken = jwtTokenManager.generateToken(memberId = loginMember.id!!, memberRole = MemberRole.MEMBER),
        refreshToken = null
    )
}

fun socialSignUp(request: SocialSignUpRequest, oAuthRequest: OAuthResponse): SignUpResponse {

    check(!memberRepository.existsByEmail(request.email)) { "존재하는 이메일" }
    check(!memberRepository.existsByNickname(request.nickname)) { "이미 존재하는 닉네임" }

    val member = SignUpRequest.toEntity(
        SignUpRequest(
            email = request.email,
            code = "소셜 로그인",
            password = "${oAuthRequest.provider}+${oAuthRequest.providerId}", //TODO 추후에 고유 값으로 대체가능
            confirmPassword = "${oAuthRequest.provider}+${oAuthRequest.providerId}",
            nickname = request.nickname,
            providerName = oAuthRequest.provider,
            providerId = oAuthRequest.providerId,
        ), passwordEncoder
    )
    member.profileImageUrl = oAuthRequest.profileImageUrl
    memberRepository.addMember(member)
    return SignUpResponse.from(member)
}

 

현재 소셜로그인용 api를 따로 만들것인지, 아니면 기존의 로그인에서 추가로 작성할지에 대해서는 고려중이다.

또한 소셜로그인으로 회원가입시 password를 고유값으로 설정하고

소셜 로그인 진행시 OAuthResponse값을 어떻게 인자로 받아서 값을 설정할지에 대한 부분도 고민을 해봐야겠다.