Skip to content

Commit f0a69f3

Browse files
committed
feat: 카카오톡 로그아웃/회원탈퇴 구현 완료 #68
1 parent 30d15e8 commit f0a69f3

6 files changed

Lines changed: 57 additions & 26 deletions

File tree

app/src/main/java/com/kuit/ourmenu/data/oauth/KakaoModule.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ import javax.inject.Singleton
1414
import kotlin.coroutines.resume
1515

1616
@Singleton
17-
class KakaoRepository @Inject constructor(
18-
@ApplicationContext private val context: Context
19-
) {
17+
class KakaoRepository @Inject constructor() {
2018
fun getKakaoLogin(
19+
context: Context,
2120
successLogin: () -> Unit,
2221
) {
2322
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
@@ -29,7 +28,9 @@ class KakaoRepository @Inject constructor(
2928
}
3029

3130
if (UserApiClient.instance.isKakaoTalkLoginAvailable(context)) {
31+
Log.d("KakaoModule", "카카오톡으로 로그인 가능")
3232
UserApiClient.instance.loginWithKakaoTalk(context) { token, error ->
33+
Log.d("KakaoModule", "카카오톡으로 로그인 시도")
3334
if (error != null) {
3435
Log.e("KakaoModule", "카카오톡으로 로그인 실패", error)
3536
if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
@@ -40,9 +41,23 @@ class KakaoRepository @Inject constructor(
4041
} else if (token != null) {
4142
Log.i("KakaoModule", "카카오톡으로 로그인 성공 ${token.accessToken}")
4243
}
44+
UserApiClient.instance.me { user, error ->
45+
if (error != null) {
46+
Log.e("KakaoModule", "사용자 정보 요청 실패", error)
47+
}
48+
else if (user != null) {
49+
Log.i("KakaoModule", "사용자 정보 요청 성공" +
50+
"\n회원번호: ${user.id}" +
51+
"\n이메일: ${user.kakaoAccount?.email}" +
52+
"\n닉네임: ${user.kakaoAccount?.profile?.nickname}" +
53+
"\n프로필사진: ${user.kakaoAccount?.profile?.thumbnailImageUrl}")
54+
}
55+
}
56+
4357
successLogin()
4458
}
4559
} else {
60+
Log.d("KakaoModule", "카카오톡으로 로그인 불가능, 카카오계정으로 로그인 시도")
4661
UserApiClient.instance.loginWithKakaoAccount(context, callback = callback)
4762
successLogin()
4863
}

app/src/main/java/com/kuit/ourmenu/ui/my/screen/MyScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ fun MyRoute(
169169
shakeOffset = shakeOffset,
170170
navigateToEdit = { navigateToEdit(uiState.mealTimes.map { it.mealTime }) },
171171
updatePasswordState = { viewModel.updatePasswordState(null) },
172-
logout = viewModel::logout,
173-
deleteAccount = viewModel::deleteAccount,
172+
logout = { viewModel.logout(context) },
173+
deleteAccount = { viewModel.deleteAccount(context) },
174174
updateBottomSheetVisible = viewModel::updateBottomSheetVisible,
175175
updateCurrentPasswordModalVisible = viewModel::updateCurrentPasswordModalVisible,
176176
updateNewPasswordModalVisible = viewModel::updateNewPasswordModalVisible,

app/src/main/java/com/kuit/ourmenu/ui/my/viewmodel/MyPageViewModel.kt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.kuit.ourmenu.ui.my.viewmodel
22

3+
import android.content.Context
34
import android.util.Log
45
import androidx.lifecycle.ViewModel
56
import androidx.lifecycle.viewModelScope
@@ -100,7 +101,9 @@ class MyPageViewModel @Inject constructor(
100101
}
101102
}
102103

103-
fun logout() {
104+
fun logout(
105+
context: Context
106+
) {
104107
viewModelScope.launch {
105108
var kakaoResult = true
106109

@@ -125,14 +128,18 @@ class MyPageViewModel @Inject constructor(
125128
},
126129
onFailure = {
127130
Log.d("MyPageViewModel", "logout Failure: $it")
128-
kakaoRepository.getKakaoLogin { }
131+
kakaoRepository.getKakaoLogin(
132+
context = context,
133+
) { }
129134
}
130135
)
131136
}
132137
}
133138
}
134139

135-
fun deleteAccount() {
140+
fun deleteAccount(
141+
context: Context
142+
) {
136143
viewModelScope.launch {
137144
var kakaoResult = true
138145

@@ -156,7 +163,9 @@ class MyPageViewModel @Inject constructor(
156163
},
157164
onFailure = {
158165
Log.d("MyPageViewModel", "deleteAccount: $it")
159-
kakaoRepository.getKakaoLogin { }
166+
kakaoRepository.getKakaoLogin(
167+
context = context
168+
) { }
160169
}
161170
)
162171
}

app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavHost.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,13 @@ fun MainNavHost(
4444
navigateToSignupPassword = navController::navigateToSignupPassword,
4545
navigateToSignupMealTime = navController::navigateToSignupMealTime,
4646
getSignupViewModel = { navBackStackEntry ->
47-
val parent = remember(navBackStackEntry) {
48-
navController.navController.getBackStackEntry(Routes.SignupEmail)
49-
}
50-
hiltViewModel<SignupViewModel>(parent)
47+
navBackStackEntry.destination.parent?.route?.let {
48+
49+
val parent = remember(navBackStackEntry) {
50+
navController.navController.getBackStackEntry(Routes.SignupEmail)
51+
}
52+
hiltViewModel<SignupViewModel>(parent)
53+
} ?: hiltViewModel<SignupViewModel>()
5154
}
5255
)
5356

app/src/main/java/com/kuit/ourmenu/ui/onboarding/screen/LandingScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ fun LandingRoute(
9191
navigateToLogin = navigateToLogin,
9292
navigateToSignupEmail = navigateToSignupEmail,
9393
onKakaoLoginClick = {
94-
viewModel.getKakaoLogin()
94+
viewModel.getKakaoLogin(context = context)
9595
}
9696
)
9797
}

app/src/main/java/com/kuit/ourmenu/ui/onboarding/viewmodel/LandingViewModel.kt

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.kuit.ourmenu.ui.onboarding.viewmodel
22

3+
import android.content.Context
34
import android.util.Log
45
import androidx.lifecycle.ViewModel
56
import androidx.lifecycle.viewModelScope
@@ -29,28 +30,31 @@ class LandingViewModel @Inject constructor(
2930
private val _error: MutableStateFlow<String?> = MutableStateFlow(null)
3031
val error = _error.asStateFlow()
3132

32-
init {
33-
// TODO : 디버깅 후 블록 삭제
34-
UserApiClient.instance.unlink { error ->
35-
if (error != null) {
36-
Log.e("KakaoModule", "연결 끊기 실패", error)
37-
} else {
38-
Log.i("KakaoModule", "연결 끊기 성공. SDK에서 토큰 삭제 됨")
39-
}
40-
}
41-
}
33+
// 카카오 로그인 테스트용 unlink 함수
34+
// init {
35+
// UserApiClient.instance.unlink { error ->
36+
// if (error != null) {
37+
// Log.e("KakaoModule", "연결 끊기 실패", error)
38+
// } else {
39+
// Log.i("KakaoModule", "연결 끊기 성공. SDK에서 토큰 삭제 됨")
40+
// }
41+
// }
42+
// }
4243

4344
fun updateKakaoState(state: KakaoState) {
4445
_uiState.update {
4546
it.copy(kakaoState = state)
4647
}
4748
}
4849

49-
fun getKakaoLogin() {
50+
fun getKakaoLogin(
51+
context: Context
52+
) {
5053
kakaoRepository.getKakaoLogin(
54+
context = context,
5155
successLogin = {
5256
updateKakaoState(KakaoState.Loading)
53-
}
57+
},
5458
)
5559
}
5660

0 commit comments

Comments
 (0)