Skip to content

Commit 7d0e0a4

Browse files
committed
[hotfix] 애플유저 최초1회 revoke 로직 추가
1 parent 0b40c17 commit 7d0e0a4

File tree

1 file changed

+59
-4
lines changed

1 file changed

+59
-4
lines changed

Projects/App/Sources/Splash/SplashFeature.swift

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
//
55
// Created by 김민호 on 7/11/24.
66

7+
import Foundation
8+
79
import ComposableArchitecture
810
import CoreKit
911
import Util
@@ -18,6 +20,7 @@ public struct SplashFeature {
1820
/// - State
1921
@ObservableState
2022
public struct State: Equatable {
23+
@Shared(.appStorage("isNeedSessionDeleted")) var isNeedSessionDeleted: Bool = true
2124
public init() {}
2225
}
2326
/// - Action
@@ -32,7 +35,9 @@ public struct SplashFeature {
3235
public enum View: Equatable {
3336
case onAppear
3437
}
35-
public enum InnerAction: Equatable { case doNothing }
38+
public enum InnerAction: Equatable {
39+
case 키_제거
40+
}
3641
public enum AsyncAction: Equatable { case doNothing }
3742
public enum ScopeAction: Equatable { case doNothing }
3843
public enum DelegateAction: Equatable {
@@ -73,9 +78,48 @@ private extension SplashFeature {
7378
func handleViewAction(_ action: Action.View, state: inout State) -> Effect<Action> {
7479
switch action {
7580
case .onAppear:
76-
return .run { send in
81+
return .run { [isNeedSessionDeleted = state.isNeedSessionDeleted] send in
7782
try await self.clock.sleep(for: .milliseconds(2000))
78-
83+
if isNeedSessionDeleted {
84+
guard let platform = userDefaults.stringKey(.authPlatform) else {
85+
print("platform이 없어서 벗어남")
86+
await send(.inner(.키_제거))
87+
await send(.delegate(.loginNeeded))
88+
return
89+
}
90+
// 🚨 이거 구글유저도 분기문 잘 넘어가나 체크해줘!
91+
if platform == "애플" {
92+
guard let authCode = userDefaults.stringKey(.authCode) else {
93+
print("authCode가 없어서 벗어남")
94+
await send(.inner(.키_제거))
95+
await send(.delegate(.loginNeeded))
96+
return
97+
}
98+
99+
guard let jwt = userDefaults.stringKey(.jwt) else {
100+
print("jwt가 없어서 벗어남")
101+
await send(.inner(.키_제거))
102+
await send(.delegate(.loginNeeded))
103+
return
104+
}
105+
106+
guard let serverRefreshToken = keychain.read(.serverRefresh) else {
107+
await send(.inner(.키_제거))
108+
await send(.delegate(.loginNeeded))
109+
return
110+
}
111+
112+
try await authClient.appleRevoke(
113+
serverRefreshToken,
114+
AppleTokenRequest(
115+
authCode: authCode,
116+
jwt: jwt
117+
)
118+
)
119+
await send(.inner(.키_제거))
120+
await send(.delegate(.loginNeeded))
121+
}
122+
}
79123
/// 🚨 Error Case [1]: 로그인 했던 플랫폼 정보가 없을 때
80124
guard let _ = userDefaults.stringKey(.authPlatform) else {
81125
await send(.delegate(.loginNeeded))
@@ -103,7 +147,18 @@ private extension SplashFeature {
103147
}
104148
/// - Inner Effect
105149
func handleInnerAction(_ action: Action.InnerAction, state: inout State) -> Effect<Action> {
106-
return .none
150+
switch action {
151+
case .키_제거:
152+
keychain.delete(.accessToken)
153+
keychain.delete(.refreshToken)
154+
keychain.delete(.serverRefresh)
155+
return .run { [isNeedSessionDeleted = state.$isNeedSessionDeleted] send in
156+
await userDefaults.removeString(.authCode)
157+
await userDefaults.removeString(.jwt)
158+
await userDefaults.removeString(.authPlatform)
159+
await isNeedSessionDeleted.withLock { $0 = false }
160+
}
161+
}
107162
}
108163
/// - Async Effect
109164
func handleAsyncAction(_ action: Action.AsyncAction, state: inout State) -> Effect<Action> {

0 commit comments

Comments
 (0)