2016-11-07 10 views
0

データベース内のフィールドの値を単純に更新するREST APIを呼び出す必要があります。これを行うには、次のVolleyリクエストを使用しますが、予期しない応答コード401(権限なし)が返されます.OAuth2認証のヘッダーが無視されるようです。私はアクセストークンの値をチェックし、それが正しくあります。私の間違いは何ですか?OAuth2権限付きのAndroid Volleyリクエスト

private void sendRegistrationTokenToServer(final String token) { 
     // user ID taken from SharedPreferences 
     final String id = Integer.toString(SharedPrefManager.getInstance(this).getUserId()); 

     StringRequest stringRequest = new StringRequest 
      (
      Request.Method.PUT, 
      Constants.URL_GCM_TOKEN+"/"+ Utils.base64Encode(id), 

      new Response.Listener<String>() 
       { 
       @Override 
       public void onResponse(String s) 
        { 
        Intent registrationComplete = new Intent(REGISTRATION_TOKEN_SENT); 
        LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(registrationComplete); 
        } 
       }, 

      new Response.ErrorListener() 
       { 
       @Override 
       public void onErrorResponse(VolleyError volleyError) 
        { 
        Toast.makeText(getBaseContext(), "Unexpected error occurred when saving the GCM token for push notifications", Toast.LENGTH_LONG).show(); 
        } 
       }) 
      { 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError 
       { 
       Map<String, String> params = new HashMap<>(); 

       params.put("gcm_token", token); 

       return params; 
       } 


      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError 
       { 
       Map<String, String> headers = new HashMap<String, String>(); 

       headers.put("Content-Type", "application/json"); 

       String bearer = "Bearer ".concat(SharedPrefManager.getInstance(getBaseContext()).getUserAccessToken()); 

       headers.put("Authorization", bearer); 

       return headers; 
       } 
      }; 

     App.getInstance().addToRequestQueue(stringRequest); 
     } 

答えて

1

私は解決策を知るために必要な場合、誰か:)いくつかの動機については で、サーバーポリシーは認証ヘッダを削除し、自分自身を答えるので、私はX-という名前の別のカスタムヘッダーを、提供しなければなりませんでした許可一方(「ベアラ」)と同じ値を持つ許可コピー、およびIは、許可ヘッダがリクエスト内に見つからない場合を管理するためにサーバ・コードを変更しなければなりませんでした。したがって、サーバーは他のカスタムX-Authorization-Copyヘッダーが存在し、それから承認データを受け取るかどうかをチェックします。 さらに、Content-Typeヘッダーはapplication/jsonではなくx-www-form-urlencodedでなければなりません。そうしないとエラーが発生します。 これで動作します。

+0

コードを追加してください。 – XoXo

関連する問題