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