如何从 android 客户端进行经过身份验证的 django rest api 调用?

How to make authenticated django rest api call from android client?

我正在制作一个 android 应用程序,它以 django rest api 作为后端,并希望在 he/she 登录后使用提供给用户的令牌进行经过身份验证的网络调用英寸

我正在使用改装向后端发出请求。这是我现在正在做的尝试对其余部分进行经过身份验证的网络调用 api。

@Override
public void loadAllUsers() {
    Call<List<User>> call = userServiceApi.loadAllUsers();
    call.enqueue(new Callback<List<User>>() {
        @Override
        public void onResponse(@NonNull Call<List<User>> call, @NonNull Response<List<User>> response) {
            if (response.isSuccessful()) {
                List<User> users = response.body();
                eventBus.post(new LoadAllUsersEvent(users));
            } else {
                eventBus.post(new FailLoadAllUsersEvent());
                Log.d(TAG, response.message());
            }
        }

        @Override
        public void onFailure(@NonNull Call<List<User>> call, @NonNull Throwable t) {
            eventBus.post(new LoadUsersUnreachableServerEvent());
            Log.d(TAG, t.toString());
        }
    });
}

这里是与这个api请求相关的改装接口:

@GET("users/")
Call<List<User>> loadAllUsers(@Header("Authorization: Token ") Token token);

当我进行此调用并将用户令牌作为 header 传递时,我得到状态代码 401:未验证:"GET /users/ HTTP/1.1" 401 58

为了让 django rest Token Authentication 工作并进行经过身份验证的 django rest api 调用,我做错了什么?

快速解决此问题的方法是更改​​您的 api 界面:

@GET("users/")
Call<List<User>> loadAllUsers(@Header("Authorization") Token token);

您传递的值的格式应为 "Token %s"

这不是一个很好的解决方案,因为您必须将令牌传递给所有 api 调用。

解决授权问题的更好方法是使用 OkHttp client 并实施身份验证器,它会为您处理一切。

OkHttp 和 Retrofit 配合得很好。