auth to server-V26
This commit is contained in:
parent
b2e1fd800d
commit
cebf25a11c
1 changed files with 36 additions and 5 deletions
|
|
@ -2,6 +2,7 @@ package com.example.login_v3.data.di
|
||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import com.example.login_v3.data.api.TecnologiaApi
|
import com.example.login_v3.data.api.TecnologiaApi
|
||||||
|
import com.example.login_v3.data.repository.basic.TokenManager
|
||||||
import com.squareup.moshi.Moshi
|
import com.squareup.moshi.Moshi
|
||||||
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
|
|
@ -9,8 +10,12 @@ import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import dagger.hilt.components.SingletonComponent
|
import dagger.hilt.components.SingletonComponent
|
||||||
|
import kotlinx.coroutines.flow.first
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import retrofit2.converter.moshi.MoshiConverterFactory
|
import retrofit2.converter.moshi.MoshiConverterFactory
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
|
@ -22,17 +27,43 @@ object NetworkModule {
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideMoshi(): Moshi {
|
fun provideMoshi(): Moshi {
|
||||||
return Moshi.Builder()
|
return Moshi.Builder()
|
||||||
// 如果未來需要加入自定義的 Adapter (例如處理 Date),在這裡加
|
|
||||||
.addLast(KotlinJsonAdapterFactory())
|
.addLast(KotlinJsonAdapterFactory())
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 🟢 修正:在這裡注入 okHttpClient
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideRetrofit(moshi: Moshi, okHttpClient: OkHttpClient): Retrofit {
|
||||||
|
return Retrofit.Builder()
|
||||||
|
.baseUrl("http://192.168.0.217/")
|
||||||
|
.client(okHttpClient) // 🔥 關鍵:將攔截器綁定到 Retrofit
|
||||||
|
.addConverterFactory(MoshiConverterFactory.create(moshi))
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideRetrofit(moshi: Moshi): Retrofit { // 注入 moshi
|
fun provideOkHttpClient(tokenManager: TokenManager): OkHttpClient {
|
||||||
return Retrofit.Builder()
|
return OkHttpClient.Builder()
|
||||||
.baseUrl("http://192.168.0.217/")
|
.connectTimeout(15, TimeUnit.SECONDS) // 連線逾時
|
||||||
.addConverterFactory(MoshiConverterFactory.create(moshi)) // 使用配置好的 moshi
|
.readTimeout(15, TimeUnit.SECONDS) // 讀取逾時
|
||||||
|
.addInterceptor { chain ->
|
||||||
|
val token = runBlocking { tokenManager.accessToken.first() }
|
||||||
|
val requestBuilder = chain.request().newBuilder()
|
||||||
|
|
||||||
|
token?.let {
|
||||||
|
requestBuilder.addHeader("Authorization", "Bearer $it")
|
||||||
|
}
|
||||||
|
|
||||||
|
val response = chain.proceed(requestBuilder.build())
|
||||||
|
|
||||||
|
if (response.code == 401) {
|
||||||
|
runBlocking { tokenManager.clearAuthData() }
|
||||||
|
}
|
||||||
|
|
||||||
|
response
|
||||||
|
}
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue