J'ai mis en retrofit avec l'authentification de base, j'envoie la @header sur ma demande de connexion, mais quand je l'appelle une demande authentifiée, il me retourne 401 (Non authorizated).Rénovation + authentification de base
Comment je l'implémente générique? Ou dois-je toujours appeler mes demandes authentifiées avec @header?
@GET("user")
Call<User> getUserByEmail(@Query("email") String email, @Header("Authorization") String authorization);
Quand j'appelle Get utilisateur par courrier électronique (I authentifier l'utilisateur) ...
@PUT("usuario/{userId}/")
Call<User> putUserById(@Path("userId") Integer id, @Body User user);
Quand je Mettre un appel utilisateur (je dois faire une demande authentifiée).
Ma classe de rénovation ...
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();
}
}
quelqu'un peut me aider?
* Ou dois-je toujours appeler mes demandes authentifiées avec @header? * Cela dépend de la façon dont vous avez implémenté auth sur votre serveur et de la façon dont vous identifiez les demandes/appareils –
Pouvez-vous me montrer un exemple pour le rendre générique? –
Vous pouvez ajouter des en-têtes à la demande de RequestInterceptor et ajouter cet intercepteur à votre RestAdapter. Et pour chaque demande, utilisez cet adaptateur de repos, afin que vous n'ayez pas besoin d'ajouter un en-tête à chaque fois. – rushi