2017-07-19 367 views
3

我实现了改装,我送我的登录请求@header但是当我打电话一些身份验证请求,则返回我的401(未authorizated)。基本身份验证改造+基本身份验证

如何实现它的通用?或者我总是需要用@header调用我的身份验证请求?

@GET("user") 
Call<User> getUserByEmail(@Query("email") String email, @Header("Authorization") String authorization); 

当我打电话获取用户通过电子邮件(我认证用户)...

@PUT("usuario/{userId}/") 
Call<User> putUserById(@Path("userId") Integer id, @Body User user); 

当我打电话把用户(我需要验证的请求)。

我的改装类...

public class NetworkService { 
private NetworkAPI networkAPI; 
private OkHttpClient okHttpClient; 

public NetworkService() { 
    okHttpClient = buildClient(); 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(BuildConfig.HOST) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .client(okHttpClient) 
      .build(); 

    networkAPI = retrofit.create(NetworkAPI.class); 
} 

public NetworkAPI getAPI() { 
    return networkAPI; 
} 

private OkHttpClient buildClient() { 

    OkHttpClient.Builder builder = new OkHttpClient.Builder(); 

    builder.addInterceptor(new Interceptor() { 
     @Override 
     public Response intercept(Chain chain) throws IOException { 
      Response response = chain.proceed(chain.request()); 

      return response; 
     } 
    }); 

    builder.addInterceptor(new Interceptor() { 
     @Override 
     public Response intercept(Chain chain) throws IOException { 
      //this is where we will add whatever we want to our request headers. 
      Request request = chain.request().newBuilder() 
        .addHeader("Accept", "application/json") 
        .addHeader("Content-Type", "application/json") 
        .build(); 
      return chain.proceed(request); 
     } 
    }); 

    return builder.build(); 
} 
} 

有人能帮助我吗?

+0

一些基本的认证对象的样本串授权*或者我总是需要调用我的@header认证请求?*这取决于你如何实现你的服务器上的身份验证,以及如何识别请求/设备 –

+0

你能告诉我一个示例使其通用? –

+0

您可以RequestInterceptor请求添加标题和拦截器添加到您的RestAdapter。并且对于每个请求都使用此休息适配器,以便您不必每次都添加标题。 – rushi

回答

1

使用@Header( “授权”)的网络服务

Request request = chain.request().newBuilder() 
        .addHeader("Accept", "application/json") 
        .addHeader("Content-Type", "application/json") 
        .addHeader("Authorization", "AuthorizationValue") 
        .build(); 
+0

你可以简单的检查,如果(islogin){的addHeader(“授权”,“AuthorizationValue”)} –

+0

我需要保存在我的应用程序类的信息? –

+0

您可以使用共享偏好进行保存和加载 –

0

如果使用改造2,这里是在头

public interface SomeApi { 
@Headers({ 
    "Content-Type: application/json", 
    "Authorization: Basic KzY1OTY0MjA4NTQ6MTExMTE=" 
}) 
@POST("test/someService") 
Completable getTrips(); 

}