2017-10-21 210 views
2

Interface:autorisation de base en retrofit

@GET("burrowedbooks/") 
Call<JsonArray> getCategoryList(@Header("Authorization") String token); 

Utilisation:

private LibraryAPi service; 

    Retrofit retrofit = new Retrofit.Builder() 
      //.client(client) 
      .baseUrl(String.valueOf(R.string.base_url)) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 

     service = retrofit.create(LibraryAPi.class); 



// Extract token from Shared Preferences. 
    SharedPreferences prefs = getActivity().getSharedPreferences(getString(R.string.login_data), MODE_PRIVATE); 
    String token = "Bearer "+prefs.getString("token",""); 


    Call<JsonArray> categoryListResponseCall = service.getCategoryList(token); 
    categoryListResponseCall.enqueue(new Callback<JsonArray>() { 
     @Override 
     public void onResponse(Call<JsonArray> call, Response<JsonArray> response) { 
      int statusCode = response.code(); 

      Toast.makeText(getContext(), ""+statusCode, Toast.LENGTH_SHORT).show(); 

     } 

     @Override 
     public void onFailure(Call<JsonArray> call, Throwable t) { 

     } 
    }); 

J'essaie d'envoyer jeton d'authentification stockées dans les préférences partagées. Le code ci-dessus ne fonctionne pas. Il renvoie le code d'état interdit 403. Quelle est la bonne façon d'envoyer l'en-tête d'authentification?

+0

Probablement le jeton a expiré –

Répondre

1

Vous avez tort à .baseUrl(String.valueOf(R.string.base_url))

Vous devriez obtenir la chaîne de ressource à l'aide .baseUrl(getActivity().getString(R.string.base_url))

Mais votre code ne sera pas envoyer des données au serveur et onFailure serait appelé.

Si vous obtenez la chaîne correctement et obtenez toujours 403, vous pouvez vérifier votre implémentation back end en utilisant posman.

+0

Apportez les modifications, mais cela ne fonctionne toujours pas. – Sushil

+0

L'avez-vous essayé chez un facteur? Et ce qui est imprimé lorsque vous imprimez 'response.raw()'? –

+0

'Réponse {protocole = http/1.0, code = 403, message = Interdit, url = https: //06724330.ngrok.io/burrowedbooks/}' – Sushil

0

Vous pouvez également créer un intercepteur personnalisé pour ajouter automatiquement votre en-tête à de nouvelles demandes.

OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 
httpClient.addInterceptor(new Interceptor() { 
    @Override 
    public Response intercept(Interceptor.Chain chain) throws IOException { 
     Request original = chain.request(); 

     Request request = original.newBuilder() 
      .header("Authorization", token) 
      .method(original.method(), original.body()) 
      .build(); 

     return chain.proceed(request); 
    } 
} 

OkHttpClient client = httpClient.build(); 
Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl(API_BASE_URL) 
    .addConverterFactory(GsonConverterFactory.create()) 
    .client(client) 
    .build(); 

En outre, vérifier si jeton est reçu de bonne SharedPreferences. Ça a l'air bizarre comment tu l'as lu.