@@ -21,9 +21,10 @@ import io.ktor.http.encodedPath
2121import io.ktor.serialization.kotlinx.json.json
2222import kotlinx.serialization.json.Json
2323import org.whosin.client.BuildKonfig
24+ import org.whosin.client.core.auth.TokenExpiredManager
2425import org.whosin.client.core.datastore.TokenManager
2526import org.whosin.client.data.dto.request.ReissueTokenRequestDto
26- import org.whosin.client.data.dto.response.TokenDto
27+ import org.whosin.client.data.dto.response.ReissueTokenResponseDto
2728
2829object HttpClientFactory {
2930 val BASE_URL = BuildKonfig .BASE_URL
@@ -45,10 +46,11 @@ object HttpClientFactory {
4546 socketTimeoutMillis = 20_000L
4647 requestTimeoutMillis = 20_000L
4748 }
48- install(Auth ){
49+ install(Auth ) {
4950 bearer {
5051 loadTokens {
51- val accessToken = tokenManager.getAccessToken() ? : " eyJhbGciOiJIUzI1NiJ9.eyJ0b2tlblR5cGUiOiJhY2Nlc3MiLCJ1c2VySWQiOjUsInByb3ZpZGVySWQiOiJsb2NhbGhvc3QiLCJuYW1lIjoi7Iug7KKF7JykIiwicm9sZSI6IlJPTEVfTUVNQkVSIiwiaWF0IjoxNzU5MzgyMzg3LCJleHAiOjE3NTk5ODcxODd9.kT9IH60aCA-6ByEITb-_qPAJY0Oik1bbPKqcBWXzHIk"
52+ val accessToken = tokenManager.getAccessToken()
53+ ? : " eyJhbGciOiJIUzI1NiJ9.eyJ0b2tlblR5cGUiOiJhY2Nlc3MiLCJ1c2VySWQiOjUsInByb3ZpZGVySWQiOiJsb2NhbGhvc3QiLCJuYW1lIjoi7Iug7KKF7JykIiwicm9sZSI6IlJPTEVfTUVNQkVSIiwiaWF0IjoxNzU5MzgyMzg3LCJleHAiOjE3NTk5ODcxODd9.kT9IH60aCA-6ByEITb-_qPAJY0Oik1bbPKqcBWXzHIk"
5254 val refreshToken = tokenManager.getRefreshToken() ? : " no_token"
5355 BearerTokens (accessToken = accessToken, refreshToken = refreshToken)
5456 }
@@ -75,7 +77,7 @@ object HttpClientFactory {
7577 " auth/login" ,
7678 " auth/email" ,
7779 " auth/email/validation" ,
78- " member /reissue" // 토큰 재발급 요청 자체에는 만료된 액세스 토큰을 보내면 안 됨
80+ " auth /reissue" // 토큰 재발급 요청
7981 )
8082
8183 val isNoAuthPath = pathWithNoAuth.any { noAuthPath ->
@@ -88,26 +90,42 @@ object HttpClientFactory {
8890 }
8991 }
9092 refreshTokens {
91- val rt = tokenManager.getRefreshToken() ? : " no_token"
92- val response = client.post(" member/reissue" ){
93- setBody {
94- ReissueTokenRequestDto (
95- refreshToken = rt
93+ try {
94+ val rt = tokenManager.getRefreshToken()
95+ if (rt.isNullOrEmpty()) {
96+ tokenManager.clearToken()
97+ TokenExpiredManager .setTokenExpired()
98+ return @refreshTokens null
99+ }
100+
101+ val response = client.post(" auth/reissue" ) {
102+ setBody(ReissueTokenRequestDto (refreshToken = rt))
103+ markAsRefreshTokenRequest()
104+ }.body<ReissueTokenResponseDto >()
105+
106+ if (response.success && response.data != null ) {
107+ tokenManager.saveTokens(
108+ accessToken = response.data.accessToken,
109+ refreshToken = response.data.refreshToken
110+ )
111+ BearerTokens (
112+ accessToken = response.data.accessToken,
113+ refreshToken = response.data.refreshToken
96114 )
115+ } else {
116+ tokenManager.clearToken()
117+ TokenExpiredManager .setTokenExpired()
118+ null
97119 }
98- markAsRefreshTokenRequest()
99- }.body<TokenDto >()
100- tokenManager.saveTokens(
101- accessToken = response.accessToken,
102- refreshToken = response.refreshToken
103- )
104- val accessToken = response.accessToken
105- val refreshToken = response.refreshToken
106- BearerTokens (accessToken,refreshToken)
120+ } catch (e: Exception ) {
121+ tokenManager.clearToken()
122+ TokenExpiredManager .setTokenExpired()
123+ null
124+ }
107125 }
108126 }
109127 }
110- install(Logging ){
128+ install(Logging ) {
111129 logger = object : Logger {
112130 override fun log (message : String ) {
113131 println (message)
0 commit comments