获取令牌认证视图时出现Django REST HTTP 400错误

时间:2015-02-05 14:59:56

标签: android django django-rest-framework django-authentication

我想在后端使用Django和Django-REST frameowrk来验证Native android应用程序上的用户。我目前正在使用基于令牌的身份验证系统。 (More details

我已经实现了指南中列出的完全相同的程序,以设置令牌身份验证。

现在我希望我的用户能够获取令牌以换取凭据。我使用以下代码发出POST请求:

  JSONObject cred = new JSONObject();

        try {
            cred.put("password",mPassword);
            cred.put("username",mEmail);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        try {

            HttpClient httpClient = new DefaultHttpClient();

            HttpPost httpPost = new HttpPost(Common.getServerUrl()+"/api-token-auth/");
            StringEntity credentials = new StringEntity( cred.toString());
            credentials.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
            httpPost.setHeader("Accept", "application/json");
            httpPost.setHeader("Content-type", "application/json");
            httpPost.setEntity(credentials);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();

            // Read content & Log
            inputStream = httpEntity.getContent();
            Log.i("Asynctask", cred .toString());

但是,当我将此发布到我的django后端以及#34; views.obtain_auth_token"时,我总是会出现此错误:

在服务器上:

"POST /api-toekn-auth/ HTTP/1.1 400" 

回复我回复:

{"non_field_errors":["Unable to log in with provided credentials."]}

我想了解是什么引发了这个HTTP 400(错误请求错误)

2 个答案:

答案 0 :(得分:2)

当提供的登录凭据无效时,会出现此错误。

检查以下内容:

  • 您的用户是否存在于数据库的auth_user表中,而is_active字段是否设置为1?
  • 您的密码是否正确?
  • 您的用户在authtoken_token表中有令牌?

答案 1 :(得分:1)

常见错误是,如果您使用的是HyperlinkedModelSerializer或ModelSerializer,则需要在创建帐户时对密码进行编码

喜欢这个

class UserSerializer(serializers.HyperlinkedModelSerializer):
  def create(self, validated_data):
    user = User(
        email=validated_data['email'],
        username=validated_data['username']
    )
    user.set_password(validated_data['password'])
    user.save()
    return user

  class Meta:
    model = User
    fields = ('url', 'username', 'password', 'email', 'groups')
    extra_kwargs = {'password': {'write_only': True}}