Retrofit添加带有令牌和ID的头信息

8

我在获取已认证用户上遇到了问题。在此之前,我已经获得了令牌和用户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`

你尝试在 @GET 上方使用 @Headers("token:" + TOKEN) 吗? - Rakshit Nawani
我总是需要新的令牌值。谢谢。 - Ruslan Myhal
另一种方法是通过getAuthorizedDriver()传递令牌和ID。 - Malik
2个回答

16

我明白了。 它应该长这样:

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

认证:

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

2
好的,如果这个可行:那太好了。但是有一个小小的批评。下次请提供一个合适的API文档。你提供的那个暗示需要2个参数,而不是从两个值中组合出一个参数。无论如何:祝你有愉快的一天,继续编码 :) - Malik

12
尝试通过方法调用传递标题值:

尝试通过方法调用传递标题值:

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

你也不需要处理这个庞大的拦截器代码块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接