2017-01-06 6 views
0

У меня возникла проблема с получением аутентифицированного пользователя. Перед этим я получил токен и идентификатор пользователя. Теперь мне нужно заставить пользователя с сервера использовать токен доступа и идентификатор. I have header formatRetrofit добавить заголовок с токеном и 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` 
+0

Пробовали ли вы с помощью @Headers ("фишку:" + СИМВОЛ) выше вашего @GET? –

+0

Мне всегда нужно новое значение токена. Спасибо –

+0

другим способом было бы передать токен, а идентификатор через getAuthorizedDriver() – Malik

ответ

0

Я получил его. Это должно выглядеть следующим образом:

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

И AUTH:

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

ОК, если это сработало: отлично для вас. но одна незначительная критика. в следующий раз предоставьте надлежащий api doc. тот, который вы указали, предположил, что вам нужны 2 параметра вместо одного, который объединен из двух значений. в любом случае: хорошо провести день и продолжить кодирование :) – Malik

0

Попробуйте пройти значения заголовка по вызову метода:

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

Вы также не должны иметь дело с этим огромным куском кода перехватчик

+0

также попытался, получил ошибку 401. спасибо –