【问题标题】:Unabe to get token from DRF get-token api无法从 DRF get-token api 获取令牌
【发布时间】:2016-11-14 18:40:46
【问题描述】:

我的自定义注册 api

from rest_framework import viewsets
from rest_framework import serializers

class SignupSerializer(serializers.Serializer):
    email = serializers.EmailField(required=True)
    password = serializers.CharField(required=True, write_only=True)

    def validate_email(self, val):
        try:
            User.objects.get(username=val)
            raise serializers.ValidationError("Email-ID already Exist")
        except User.DoesNotExist:
            return val

class SignupView(viewsets.ModelViewSet):

    serializer_class = SignupSerializer

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        data = serializer.data

        email = data.get('email')
        password = data.get('password')

        u = User(email=email, username=email)
        u.set_password(password)
        u.save()

        data = {
            'message': 'Successfully Created!',
            'data': {'id': u.id, 'email': email},
        }
        return Response(data)

Toekn 获取 api

from rest_framework.authtoken import views
urlpatterns = [
    url(r'^api-token-auth/', views.obtain_auth_token),
]

当我点击signup api 时,它返回成功响应,我的意思是

{ 'message': '创建成功!', '数据':{'id':1,'电子邮件':'xyz@gmail.com'} }

但是当我尝试使用上述令牌 api 为该用户生成/获取令牌时,它显示 ..invalid credentials?

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

但是,如果我使用管理命令 createsuperuser 创建用户并使用相同的 api 来获取令牌,它可以工作吗?

注册 api 有什么问题吗?

【问题讨论】:

  • 您是否正在为用户 Token.objects.create(user=...) 分配令牌?你能检查你的用户在数据库中是否有关联的令牌吗?如果没有,那么你必须,如果你想使用 TokenAuthentication。

标签: django django-models django-views django-rest-framework


【解决方案1】:

您应该从序列化程序中删除 write_only=True。这将修复错误。

【讨论】:

    【解决方案2】:

    错误消息实际上告诉您您的请求无法到达视图,这是因为其中一个中间件引发了错误。

    最简单(但可能不是很安全)的解决方案是在成功注册时返回 API 令牌,或者添加另一个带有登录名的视图(返回令牌)。

    要获得明确的答案,您需要提供更多信息,例如身份验证后端的配置。

    您可以在此处找到有关 DRF 中身份验证的更多信息 http://www.django-rest-framework.org/api-guide/authentication/#how-authentication-is-determined

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 1970-01-01
      • 2018-03-04
      • 2018-10-10
      • 1970-01-01
      • 2018-01-08
      • 2021-08-03
      • 2020-06-12
      • 1970-01-01
      相关资源
      最近更新 更多