Django Rest FrameWork 中的 AuthToken:non_field_errors

AuthToken in Django Rest FrameWork: non_field_errors

我正在尝试在 DRF(Django 版本 1.10)中集成基于令牌的身份验证,但是当我使用文档中提到的 {"username":"test","password":"123456789"} 点击 api-token-auth/ 时,需要 return 我得到了令牌,但我得到了

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

我在我安装的应用程序中使用了 rest_framework.authtoken 一旦用户注册并保存在 authtoken_token table 中,也会生成令牌。

也在我的 urls.py 根目录中,我正在使用

urlpatterns += [
    url(r'^api-token-auth/', authviews.obtain_auth_token),
]

如有任何帮助,我们将不胜感激。同时附上代码

urls.py

urlpatterns += [
    url(r'^api-token-auth/', authviews.obtain_auth_token),
]

settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework.authtoken',
    'users'
]

users/urls.py


from rest_framework.routers import DefaultRouter
from . import views as user_views
from django.conf.urls import url ,include


router = DefaultRouter()
router.register(r'user', user_views.UserViewSet,base_name="user")
urlpatterns = router.urls

您可能没有散列密码并按原样保存。在你看来,你应该这样保存密码。

user = User.objects.create(usename='test', first_name='first_name', email='test@abc.com')
user.set_password('password')
user.save()

user.set_password 将散列密码。

谢谢哈桑!问题已解决。我使用了 USERNAME_FIELD = 'email' 并且在 post 数据中使用了实际的用户名。还有一件事我想澄清一下是否有人可以...我使用 make_password 来散列我的密码我也可以使用 user.set_password 来散列我的密码在这两种情况下我使用 api-令牌认证。那么 DRF authtoken 实际使用哪种哈希算法或库?或者我们可以使用任何可用的库进行散列,Django 会自动对其进行解码?