2

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

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

rest_framework.authtoken一旦用户注册并保存在authtoken_tokentable中,我已经在我安装的应用程序中使用了令牌。

同样在我正在使用的根目录的 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

4

2 回答 2

2

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

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

user.set_password将哈希密码。

于 2018-01-11T06:44:03.433 回答
0

谢谢哈桑!问题已解决。我使用了 USERNAME_FIELD = 'email' 并且在帖子数据中使用了实际用户名。还有一件事我想澄清是否有人可以......我正在使用 make_password 来散列我的密码,我也可以使用 user.set_password 来散列我的密码,在这两种情况下我都使用 api-token-auth 成功获取了令牌。DRF authtoken 实际使用的是哪个哈希算法或库?或者我们可以使用任何可用的库进行哈希处理,Django 会自动解码它?

于 2018-01-11T09:57:35.380 回答