我的自定义注册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':'成功创建!', 'data':{'id':1,'email':'xyz @ gmail.com'}}
但是当我尝试使用上面的令牌API为这个用户生成/获取令牌时,它会说..无效的凭据?
{
"non_field_errors": [
"Unable to log in with provided credentials."
]
}
但是,如果我使用管理命令creationuperuser创建用户并使用相同的api来获取令牌吗?
注册api有什么问题吗?
答案 0 :(得分:1)
您应该从序列化程序中删除write_only=True
。这将解决错误。
答案 1 :(得分:0)
错误消息实际上告诉您,您的请求无法访问该视图,这是因为其中一个中间件引发了错误。
最简单(但不太安全)的解决方案是在成功注册时返回API令牌,或添加另一个带登录名的View(返回令牌)。
要获得明确答案,您需要提供更多信息,例如身份验证后端的配置。
您可以在这里找到更多关于DRF认证的信息 http://www.django-rest-framework.org/api-guide/authentication/#how-authentication-is-determined