소셜 로그인 리졸버 도입
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package kr.co.vividnext.sodalive.member.social
|
||||
|
||||
import kr.co.vividnext.sodalive.member.MemberProvider
|
||||
|
||||
interface SocialAuthService {
|
||||
fun getProvider(): MemberProvider
|
||||
fun authenticate(
|
||||
token: String,
|
||||
container: String,
|
||||
marketingPid: String?,
|
||||
pushToken: String?
|
||||
): SocialLoginResponse
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package kr.co.vividnext.sodalive.member.social
|
||||
|
||||
import kr.co.vividnext.sodalive.member.MemberProvider
|
||||
import org.springframework.stereotype.Component
|
||||
|
||||
@Component
|
||||
class SocialAuthServiceResolver(
|
||||
val services: List<SocialAuthService>
|
||||
) {
|
||||
private val serviceMap: Map<MemberProvider, SocialAuthService> = services.associateBy { it.getProvider() }
|
||||
|
||||
fun resolve(provider: MemberProvider): SocialAuthService {
|
||||
return serviceMap[provider] ?: throw IllegalArgumentException("Unsupported social provider: $provider")
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,10 @@ package kr.co.vividnext.sodalive.member.social.google
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.jwt.TokenProvider
|
||||
import kr.co.vividnext.sodalive.member.MemberAdapter
|
||||
import kr.co.vividnext.sodalive.member.MemberProvider
|
||||
import kr.co.vividnext.sodalive.member.MemberService
|
||||
import kr.co.vividnext.sodalive.member.login.LoginResponse
|
||||
import kr.co.vividnext.sodalive.member.social.SocialAuthService
|
||||
import kr.co.vividnext.sodalive.member.social.SocialLoginResponse
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.security.core.context.SecurityContextHolder
|
||||
@@ -18,19 +20,21 @@ class GoogleAuthService(
|
||||
|
||||
@Value("\${cloud.aws.cloud-front.host}")
|
||||
private val cloudFrontHost: String
|
||||
) {
|
||||
fun authenticate(
|
||||
idToken: String,
|
||||
) : SocialAuthService {
|
||||
override fun getProvider(): MemberProvider = MemberProvider.GOOGLE
|
||||
|
||||
override fun authenticate(
|
||||
token: String,
|
||||
container: String,
|
||||
marketingPid: String?,
|
||||
pushToken: String?
|
||||
): SocialLoginResponse {
|
||||
val googleUserInfo = googleService.getUserInfo(idToken)
|
||||
val googleUserInfo = googleService.getUserInfo(token)
|
||||
?: throw SodaException(messageKey = "member.social.google_login_failed")
|
||||
val memberResolveResult = memberService.findOrRegister(googleUserInfo, container, marketingPid, pushToken)
|
||||
val member = memberResolveResult.member
|
||||
val principal = MemberAdapter(member)
|
||||
val authToken = GoogleAuthenticationToken(idToken, principal.authorities)
|
||||
val authToken = GoogleAuthenticationToken(token, principal.authorities)
|
||||
authToken.setPrincipal(principal)
|
||||
SecurityContextHolder.getContext().authentication = authToken
|
||||
|
||||
|
||||
@@ -3,8 +3,10 @@ package kr.co.vividnext.sodalive.member.social.kakao
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.jwt.TokenProvider
|
||||
import kr.co.vividnext.sodalive.member.MemberAdapter
|
||||
import kr.co.vividnext.sodalive.member.MemberProvider
|
||||
import kr.co.vividnext.sodalive.member.MemberService
|
||||
import kr.co.vividnext.sodalive.member.login.LoginResponse
|
||||
import kr.co.vividnext.sodalive.member.social.SocialAuthService
|
||||
import kr.co.vividnext.sodalive.member.social.SocialLoginResponse
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.security.core.context.SecurityContextHolder
|
||||
@@ -18,19 +20,21 @@ class KakaoAuthService(
|
||||
|
||||
@Value("\${cloud.aws.cloud-front.host}")
|
||||
private val cloudFrontHost: String
|
||||
) {
|
||||
fun authenticate(
|
||||
accessToken: String,
|
||||
) : SocialAuthService {
|
||||
override fun getProvider(): MemberProvider = MemberProvider.KAKAO
|
||||
|
||||
override fun authenticate(
|
||||
token: String,
|
||||
container: String,
|
||||
marketingPid: String?,
|
||||
pushToken: String?
|
||||
): SocialLoginResponse {
|
||||
val kakaoUserInfo = kakaoService.getUserInfo(accessToken)
|
||||
val kakaoUserInfo = kakaoService.getUserInfo(token)
|
||||
?: throw SodaException(messageKey = "member.social.kakao_login_failed")
|
||||
val memberResolveResult = memberService.findOrRegister(kakaoUserInfo, container, marketingPid, pushToken)
|
||||
val member = memberResolveResult.member
|
||||
val principal = MemberAdapter(member)
|
||||
val authToken = KakaoAuthenticationToken(accessToken, principal.authorities)
|
||||
val authToken = KakaoAuthenticationToken(token, principal.authorities)
|
||||
authToken.setPrincipal(principal)
|
||||
SecurityContextHolder.getContext().authentication = authToken
|
||||
|
||||
|
||||
Reference in New Issue
Block a user