How i can provide token saved in DataStore to Intercepter in HiltModule in Android?

Viewed 23

Here is my NetworkMoudle class which provides dependecies I have tried this way

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {


    @Provides
    fun providesAuthToken() : String = ""

     @Singleton
     @Provides
    fun providesGson():Gson=GsonBuilder().enableComplexMapKeySerialization().serializeNulls().setPrettyPrinting()
            .setVersion(1.0).create()

    @Qualifiers.AuthInterceptorOkHttpClient
    @Singleton
    @Provides
    fun providesAuthInterceptor(token : String) : Interceptor = 
                       AuthenticationInterceptor(token)

    @Singleton
    @Provides
    fun providesOkhttpClient(@ApplicationContext context: Context ,
    @Qualifiers.AuthInterceptorOkHttpClient authInterceptor : Interceptor ): OkHttpClient =
        OkHttpClient.Builder()
      //    .addNetworkInterceptor()
     //     .addInterceptor(httpLoggingInterceptor)
            .addInterceptor(authInterceptor)
            .connectTimeout(100, TimeUnit.SECONDS)
            .readTimeout(100, TimeUnit.SECONDS)
            .build()


    @Singleton
    @Provides
    fun provideRetrofit(gson: Gson, client: OkHttpClient): Retrofit = Retrofit.Builder()
        .addConverterFactory(GsonConverterFactory.create(gson))
        .baseUrl(Constants.BASE_URL_V2)
        .client(client)
        .addCallAdapterFactory(NetworkResultCallAdapterFactory.create())
        .build()

    @Provides
    @Singleton
    fun provideApiService(retrofit: Retrofit) : ApiService = 
     retrofit.create(ApiService::class.java)
    }

And this is my interceptor class

 class AuthenticationInterceptor(private val authToken: String) : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val original: Request = chain.request()
        val builder: Request.Builder = original.newBuilder()
            .header("Authorization", "Bearer $authToken")
        val request: Request = builder.build()
        return chain.proceed(request)
      }
    }

the way i'm providing authToken is badly, how i proivde this token using best practice. and please go through my NetworkModule

0 Answers
Related