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 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.kotlin.reflect.KotlinJsonAdapterFactory
|
||||
import dagger.Module
|
||||
|
|
@ -9,8 +10,12 @@ import dagger.Provides
|
|||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import okhttp3.OkHttpClient
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.moshi.MoshiConverterFactory
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
|
|
@ -22,17 +27,43 @@ object NetworkModule {
|
|||
@Singleton
|
||||
fun provideMoshi(): Moshi {
|
||||
return Moshi.Builder()
|
||||
// 如果未來需要加入自定義的 Adapter (例如處理 Date),在這裡加
|
||||
.addLast(KotlinJsonAdapterFactory())
|
||||
.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
|
||||
@Singleton
|
||||
fun provideRetrofit(moshi: Moshi): Retrofit { // 注入 moshi
|
||||
return Retrofit.Builder()
|
||||
.baseUrl("http://192.168.0.217/")
|
||||
.addConverterFactory(MoshiConverterFactory.create(moshi)) // 使用配置好的 moshi
|
||||
fun provideOkHttpClient(tokenManager: TokenManager): OkHttpClient {
|
||||
return OkHttpClient.Builder()
|
||||
.connectTimeout(15, TimeUnit.SECONDS) // 連線逾時
|
||||
.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()
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue