2017-07-19 21 views
3

私は基本認証でレトロフィットを実装しました。ログインリクエストで@headerを送信しますが、認証済みのリクエストを呼び出すと、401(返信なし)が返されます。Retrofit +基本認証

どのように一般的な実装ですか?それとも、@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

でいくつかの基本的な認証のためのサンプルです使用している場合はNetworkServiceのString承認*または、認証されたリクエストを@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( "Authorization"、 "AuthorizationValue")} –

+0

私のアプリケーションクラスに情報を保存する必要がありますか? –

+0

保存と読み込みに共有設定を使用できます –

0

あなたはここ2レトロフィットとは、ヘッダ

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

}