web-dev-qa-db-ja.com

トークンとIDを使用してヘッダーを後付け

認証されたユーザーの取得に問題があります。その前に、トークンとユーザーIDを取得しました。次に、アクセストークンとIDを使用してサーバーからユーザーを取得する必要があります。 ヘッダー形式があります

今、インターセプターを使用してユーザートークンとIDでヘッダーを追加しようとしています。

私のコード:

Interceptor interceptor = new Interceptor() {
        @Override
        public okhttp3.Response intercept(Chain chain) throws IOException {
            Request newRequest = chain.request().newBuilder()
                    .addHeader("Accept", "application/json")
                    .addHeader("authorization", token) <-??
                    .addHeader("driver_id", id) <-??
                    .build();
            return chain.proceed(newRequest);
        }
    };
    OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();
    okHttpBuilder.addInterceptor(interceptor);
    OkHttpClient okHttpClient = okHttpBuilder.build();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(okHttpClient)
            .build();

インターフェース:

@GET("driver/v1/driver")
Call<Driver> getAuthorizedDriver();

さまざまなバリアントが401エラーをスローし、何をすべきかわからないログ:

I/Response code: 401
I/Response message: Unauthorized`
6
Ruslan Myhal

わかった。次のようになります。

@GET("driver/v1/driver")
Call<Driver> getAuthorizedDriver(@Header("authorization") String auth);

そして認証:

Call<Driver> call = apiInterface.getAuthorizedDriver("Token token=" + token + ", driver_id=" + id);
9
Ruslan Myhal

メソッド呼び出しを介してヘッダー値を渡してみてください。

@GET("driver/v1/driver")
Call<Driver> getAuthorizedDriver(@Header("authorization") String token,
                                 @Header("driver_id") Integer id);

また、インターセプターコードのこの巨大なチャンクを処理する必要はありません

6
Malik