-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
개선된 로그인 반영 (Oauth) #396
개선된 로그인 반영 (Oauth) #396
Conversation
Test Results6 tests 6 ✅ 1s ⏱️ Results for commit 8b9bd0c. ♻️ This comment has been updated with latest results. |
…tchy-tape into android/feature/394
if (errorResponse.statusCode == 401) { | ||
throw CtException(errorResponse.message, CtErrorType.UN_AUTHORIZED) | ||
val newAccessToken = runBlocking { | ||
val authTokenResponse = authRepository.get().refreshToken() | ||
authTokenResponse.first().accessToken | ||
} | ||
val newRequest = originalRequest.putTokenHeader(newAccessToken) | ||
chain.proceed(newRequest) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분 로직은 retrofit의 authenticator를 이용해서 구현할 수도 있어.
@@ -87,16 +91,24 @@ object NetworkModule { | |||
@ErrorInterceptor | |||
@Singleton | |||
@Provides | |||
fun provideErrorInterceptor(): Interceptor { | |||
fun provideErrorInterceptor( | |||
authRepository: Lazy<AuthRepository> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 혹시 Lazy인 이유가 있을까?
- repository는 데이터 모듈을 추상화하는 역할이라, 데이터 모듈 내부적으로는 repository 안 거치고 바로 data에 접근하는 것도 가능해
- 데이터 모듈은 interceptor ← Api(or DataStore) ← repository 이런 구조인데 interceptor가 다시 repository를 참조하면 순환 참조가 일어나는데 주의가 필요할 것 같아
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lazy 인 이유는 말씀하신, 3번 처럼 cycle이 일어나는 것 때문에 사용하였습니다.
더 개선할 수 있을거 같은데, 이슈로 따로 빼서 해보겠습니다~�
<참고>
return Interceptor { chain -> | ||
try { | ||
val response = chain.proceed(chain.request()) | ||
val originalRequest = chain.request() | ||
val response = chain.proceed(originalRequest) | ||
if (response.isSuccessful) return@Interceptor response | ||
val errorString = response.body?.string() | ||
val errorResponse = Json.decodeFromString<ErrorResponse>(errorString ?: "") | ||
|
||
if (errorResponse.statusCode == 401) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드를 자세히 보진 않았는데, 원래 로그인 시도할 때 LoginViewModel에서 401을 받으면 회원가입(닉네임) 화면으로 이동했던 걸로 기억하는데, 이렇게 변경했을 때도 로그인했을 때 미가입 회원일 경우 회원가입 화면으로 잘 이동하는지 확인해 주세용
이 코드가 이상하다기보다는, 기존의 회원가입 여부 처리 방식의 문제라고 생각하긴 해
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://www.notion.so/2024-01-29-refresh-9dbaae6a05f3448ca0294ecbafeba23c 참고하여 개발하였습니다.
참고하여 테스트 해보겠습니다~
Issue
Overview
AuthToken
model 추가 및 반영