- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
为 Django 编写的两个 JWT 包都给我带来了文档质量差的问题,所以我尝试了 DRF-auth_token 包。这是我遵循的一个很好的例子,Django Rest Framework Token Authentication .理论上你应该能够去
localhost:8000/api-token-auth/
urls.py:
from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.auth.models import User
from rest_framework.authtoken import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include('api.urls', namespace='api')),
url(r'^orders/', include('orders.urls', namespace='orders')),
url(r'^api-token-auth/', views.obtain_auth_token, name='auth-token'),
]
为用户获取 token 不起作用,所以我自己重写了它以使其起作用:
@api_view(['POST'])
def customer_login(request):
"""
Try to login a customer (food orderer)
"""
data = request.data
try:
username = data['username']
password = data['password']
except:
return Response(status=status.HTTP_400_BAD_REQUEST)
try:
user = User.objects.get(username=username, password=password)
except:
return Response(status=status.HTTP_401_UNAUTHORIZED)
try:
user_token = user.auth_token.key
except:
user_token = Token.objects.create(user=user)
data = {'token': user_token}
return Response(data=data, status=status.HTTP_200_OK)
我的版本有效:
http://localhost:8000/api/login/customer-login/
{"username": "thisguy@example.com", "password": "wombat"}
-->
{
"token": "292192b101153b7ced74dd52deb6b3df22ef2c74"
}
DRF auth_token 不起作用:
http://localhost:8000/api-token-auth/
{"username": "thisguy@example.com", "password": "wombat"}
-->
{
"non_field_errors": [
"Unable to log in with provided credentials."
]
}
设置.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# third party:
'django_extensions',
'rest_framework',
'rest_framework.authtoken',
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
)
}
看起来设置正确。我数据库中的每个用户都有一个 token 。每个用户在数据库中都是is_authenticated
和is_active
。 super 用户可以获得他们的 token :
localhost:8000/api-token-auth/
{"username": "mysuperuser", "password": "superuserpassword"}
-->
{
"token": "9297ff1f44dbc6caea67bea534f6f7590d2161b0"
}
出于某种原因,只有 super 用户才能获得 token :
localhost:8000/api-token-auth/
{"username": "regularguy", "password": "password"}
-->
{
"non_field_errors": [
"Unable to log in with provided credentials."
]
}
为什么我的用户无法登录并获取他们的 token ?谢谢
最佳答案
我在尝试使用此 API 端点时遇到了相同的错误消息:
来自 rest_framework.authtoken.views 的“obtain_auth_token”类,
但是惊喜!问题是 User serializer 在第一名 ! .
用户是使用 API endppint 创建的,他们的密码被保存为纯文本!,如以下屏幕截图所示: User Database
但是 TokenAPI 端点加密了密码,所以从那里来了冲突! ,
我已经更改了 User Serializer 类 并覆盖了 create 函数以使用对密码进行哈希处理的 set_password 函数:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['email', 'username', 'password']
extra_kwargs = {'password': {'write_only': True}}
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
现在我已经编辑了我的用户序列化器,数据存储如下: User database after modification
因此错误:“non_field_errors”: [“无法使用提供的凭据登录。” 停止显示! ,并且 token API 端点“localhost:8000/api-token-auth/”有效!
关于python - DRF auth_token : "non_field_errors": [ "Unable to log in with provided credentials.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076254/
如何验证返回的 auth_token token = bundle.getString(AccountManager.KEY_AUTHTOKEN); ? 在 Android 上获得新用户后,我需要将它
我一直在尝试使用以下代码测试我的登录系统 from django.test import TestCase, Client from rest_framework.test import force_
我是 jQuery Mobile 和 Backbone.js 的新手,正在尝试在客户端创建移动应用程序 - 使用基于 django rest 框架的 API。 当我将我的用户名和密码发布到我的 api
我想使用 Terraform 在 GCP 中使用 slack 设置警报。 我的代码是: resource "google_monitoring_notification_channel" "slack
我正在构建移动网站,我想将 facebook connect 集成到我的常规网站中。 我正在使用使用 cookie 获取 session key 的 facebook 连接,我认为在移动设备上不推荐使
我正在使用 Mongodb 来存储用户数据,包括用户状态(在线|离线|忙碌)。到期时间只有几秒钟。如果几秒钟后用户没有出现(发送保活请求),我想将状态设置为离线。 我正在为此寻找可扩展的解决方案。我正
我正在尝试使用 API 通过外部应用程序进行身份验证。不幸的是,我们的企业帐户配置为通过 SAML 将身份验证重定向回我们的内部 AD 以使用 SSO。有什么方法可以配置“服务帐户”或至少让我的企业帐
我正在使用安装文档在 Ubuntu 16.04 上手动安装 Openstack Newton: https://docs.openstack.org/newton/install-guide-ubun
好的,所以我知道如何获取帐户列表,以便我可以让用户验证我的应用程序以使用他们的 Google 数据,但是,我对我的AUTH_TOKEN_TYPE 使用什么感到困惑>. 这是我目前的代码: Accoun
我有一个 Rails 应用程序,我们使用 user_id 并写入 session 变量(作为 cookie)。我将为浏览器和移动平台使用相同的 token 。 生成授权 token 的首选方法是什么?
第一次使用pyFacebook。我从字面上复制了 example application并将它放到我的服务器上。我已经创建了一个 FB 应用程序,现在当我尝试加载该应用程序时,基本上会发生浏览器不断刷
为 Django 编写的两个 JWT 包都给我带来了文档质量差的问题,所以我尝试了 DRF-auth_token 包。这是我遵循的一个很好的例子,Django Rest Framework Token
我有自定义 JSON 身份验证 API(没有设计等)。如何将 @user.authentication_token 渲染到响应 header 而不是正文? 在 sessions_controller.
我希望从 gcloud -> slack 设置一些警报,到目前为止已按照以下说明进行了测试并运行: https://cloud.google.com/monitoring/support/notifi
所以我是 OAuth 和 Node.JS 的新手,但我必须创建一个 Flickr 机器人来上传大学项目的照片。据我了解,Node 本身不支持 multipart/formdata 请求,因此我手动构建
我已经按照 this 安装了 OpenStack . 我正在尝试按照 here 中的教程安装 Savanna 当我运行这个命令时 savanna-venv/bin/python savanna-ven
我有一个 Android 应用程序,它允许用户向我的服务器添加内容。每个用户都应在此服务器上拥有一个帐户。 应用程序通过简单的 API 与服务器通信。 我想使用用户的 gmail 地址作为用户名,并使
我需要在 Rails 3.1 API 中使用基于 token 的身份验证以及最新版本的设计。到目前为止没有问题。 现在我不想将我的 :auth_token 附加到客户端的 POST/PUT 参数,而是
我是一名优秀的程序员,十分优秀!