如何从 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 配合得很好。
我正在制作一个 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 配合得很好。