0

Таким образом, у меня возникает проблема при вызове rest-auth/user/.Django Rest Auth Token в Android Volley

Я могу войти и получить ключ от указанного логина, но из этого я не уверен, как его использовать в отношении rest-auth/user/. Я пробовал использовать его с GET в залпе, а также POST Прогулка по нему. Но каждый раз, когда я пытаюсь это сделать, я получаю обратно 403, говоря, что учетные данные не были предоставлены. Я также попытался сохранить токен на Android SharedPreferences.

Я не уверен, что может быть неправильным или как решить эту проблему, поэтому любая помощь будет оценена по достоинству.

Мой код выглядит следующим образом:

getUserQueue = Volley.newRequestQueue(this); 
JSONObject jsObj = new JSONObject(); 

try { 
    jsObj.put("token", token); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

JsonObjectRequest jsObjRequest = new JsonObjectRequest 
     (Request.Method.GET, "http://hurst.pythonanywhere.com/supportal/rest-auth/user/", jsObj, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       try { 
        result = response.getString("username"); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       error.printStackTrace(); 
      } 
     }); 
// add the request object to the queue to be executed 
getUserQueue.add(jsObjRequest); 
+0

методы GET не использовать HTTP-тело, так что я не уверен, что 'jsObj' делает в качестве параметра –

+0

возможность сделать запрос с помощью CURL или Почтальон ты? Я бы попробовал это, прежде чем писать его в Android. –

+0

Использование почтальона. Мне не удалось получить доступ через GET или POST с полученным токеном. Получаю ответное сообщение: {"detail": «Учетные данные аутентификации не были предоставлены. "} Кажется, что вы запустили данные сеанса/файлы cookie в своем браузере, потому что, если я войду в свой браузер и попытаюсь получить доступ к конечной точке пользователя, он вернет информацию об учетной записи, в которую я вошел. – user2302876

ответ

0

Из комментариев ясно, что вы используете различные схемы аутентификации для отдыха, объяснит это,

SessionAuthentication

Для аутентификации сеанса для аутентификации вам нужна постоянная реализация cookie в андроид-залпе, проверьте here, где Set-Cookie заголовок анализируется из сервисов r api ответ & отправить следующие запросы.

BasicAuthentication

В базовой схеме аутентификации, имя пользователя & пароль посылают через каждый запрос (после регистрации?), С Authorization значением заголовка (в кодировке Base64) .Чтобы проверить, как осуществить эту проверку here

@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
    HashMap<String, String> params = new HashMap<String, String>(); 
    String creds = String.format("%s:%s","USERNAME","PASSWORD"); 
    String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT); 
    params.put("Authorization", auth); 
    return params; 
} 

JSONWebTokenAuthenticatio н

В схеме аутентификации JWT после успешного входа вы получите токен JWT, вам нужно отправить этот токен в каждом запросе, который требует авторизации пользователя, для этого нужно установить значение заголовка Authorization с помощью JWT token_after_login; отправляется.

@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
    HashMap<String, String> params = new HashMap<String, String>(); 
    String auth = "JWT " + token // token you will get after successful login 
    params.put("Authorization", auth); 
    return params; 
} 
+0

У меня есть опыт работы на обеих платформах, поэтому вы можете спросить/комментировать, связано ли связанное с django или связанное с андроидом разъяснение –

Смежные вопросы