Skip to content

Commit

Permalink
Merge pull request #254 from A-fume/feature/224-remember-me-refactor
Browse files Browse the repository at this point in the history
[feat] 토큰 만료 시 자동 로그인 처리
  • Loading branch information
Haeeul authored Feb 7, 2023
2 parents 28665f1 + a3fa213 commit 5673e6c
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ interface RemoteDataSource {
// sign in
suspend fun postLoginInfo(body: RequestLogin): ResponseLogin

// auth - new token
suspend fun getNewToken(body: RequestNewToken): String

// survey
suspend fun getSeries(): MutableList<SeriesInfo>
suspend fun getSurveyPerfume(token: String): MutableList<PerfumeInfo>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,8 @@ class RemoteDataSourceImpl : RemoteDataSource{
override suspend fun getVersion(apkVersion: String): Boolean {
return api.getVersion(apkVersion).data
}

override suspend fun getNewToken(body: RequestNewToken): String {
return api.getNewToken(body).data
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -193,4 +193,10 @@ interface ScentsNoteService {
suspend fun getVersion(
@Query("apkversion") apkVersion : String
):ResponseBase<Boolean>

// auth - new token
@POST("auth/reissue")
suspend fun getNewToken(
@Body body : RequestNewToken
):ResponseOpBase<String>
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package com.scentsnote.android.data.remote.network

import androidx.annotation.Nullable
import com.google.gson.JsonObject
import com.scentsnote.android.data.local.preference.SharedPreferencesManager
import com.scentsnote.android.data.repository.SignRepository
import com.scentsnote.android.data.vo.request.RequestLogin
import com.scentsnote.android.data.vo.response.ResponseLogin
import com.scentsnote.android.data.vo.request.RequestNewToken
import kotlinx.coroutines.runBlocking
import okhttp3.Authenticator
import okhttp3.Request
Expand All @@ -20,18 +18,13 @@ class TokenAuthenticator(private val prefManager: SharedPreferencesManager) : Au
@Nullable
override fun authenticate(route: Route?, response: Response): Request? {
try {
val loginInfo = RequestLogin(prefManager.userEmail,prefManager.userPassword)
val tokenResponse: ResponseLogin =
runBlocking {
signRepository.postLoginInfo(loginInfo)
val loginInfo = RequestNewToken(prefManager.accessToken, prefManager.refreshToken)
val newToken = runBlocking {
signRepository.getNewToken(loginInfo)
}

tokenResponse.let {
prefManager.accessToken = it.token
prefManager.refreshToken = it.refreshToken
}

return getNewRequest(response.request(), prefManager.accessToken)
prefManager.accessToken = newToken!!
return getNewRequest(response.request(), newToken)

} catch (throwable: Throwable) {
when (throwable) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.scentsnote.android.data.repository
import com.scentsnote.android.data.remote.RemoteDataSource
import com.scentsnote.android.data.remote.RemoteDataSourceImpl
import com.scentsnote.android.data.vo.request.RequestLogin
import com.scentsnote.android.data.vo.request.RequestNewToken
import com.scentsnote.android.data.vo.request.RequestRegister

class SignRepository {
Expand All @@ -12,4 +13,5 @@ class SignRepository {
suspend fun getValidateNickname(nickname : String) = remoteDataSource.getValidateNickname(nickname)
suspend fun postRegisterInfo(body: RequestRegister) = remoteDataSource.postRegisterInfo(body)
suspend fun postLoginInfo(body : RequestLogin) = remoteDataSource.postLoginInfo(body)
suspend fun getNewToken(body: RequestNewToken) = remoteDataSource.getNewToken(body)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.scentsnote.android.data.vo.request

data class RequestNewToken(
val accessToken : String,
val refreshToken : String
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,10 @@ data class ResponseBase<T>(

data class ResponseMessage(
val message: String
)

data class ResponseOpBase<T>(
val message: String,
val opcode: Int,
val data: T
)

0 comments on commit 5673e6c

Please sign in to comment.