auth to server-V26

This commit is contained in:
Eric85710 2026-05-01 14:50:27 +08:00
parent b2e1fd800d
commit cebf25a11c

View file

@ -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()
}