Reputation: 1944
I am learning Django, i was creating rest Api for login and registration api it was working but all of sudden Login api is not working
authenticate(username=username, password=password)
is always returning none while registration api work properly. below is code for login
@api_view(['POST'])
def login(requset):
"""
This api for user login
---
parameters:
- name: username
description: username for login
required: true
type: string
paramType: form
- name: password
required: true
type: string
paramType: form
consumes:
- application/json
- application/xml
produces:
- application/json
- application/xml
"""
username = requset.data.get('username')
print(username)
password = requset.data.get('password')
print(password)
user = authenticate(username=username, password=password)
if user is not None:
response_data = {}
response_data['result'] = 'success'
response_data['message'] = 'Login successful'
# response_data['auth_token'] = auth_token
return HttpResponse(json.dumps(response_data),
content_type="application/json")
else:
response_data = {}
response_data['result'] = 'error'
response_data['message'] = 'Login Unsuccessful'
return HttpResponse(json.dumps(response_data),
content_type="application/json")
This is code for registration
class Register(generics.CreateAPIView):
"""
Your docs
---
type:
username:
required: true
type: string
password:
required: true
type: url
email:
required: true
type: string
serializer: .serializers.UserSerializer
omit_serializer: false
parameters_strategy: merge
omit_parameters:
- path
parameters:
- name: username
description: Username for registration purpose
required: true
type: string
paramType: form
- name: password
description: * password for registration purpose
required: true
type: string
paramType: form
- name: email
description: * email for registration purpose
required: true
type: string
paramType: form
responseMessages:
- code: 401
message: Not authenticated
consumes:
- application/json
- application/xml
produces:
- application/json
- application/xml
"""
#first define query set
queryset = User.objects.all()
#define model
model = User
#define serializer
serializer_class = UserSerializer
Code for userserializer
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id','username','email','password','is_active')
i always get below response
{
"message": "Login Unsuccessful",
"result": "error"
}
While previously it was coming proper. Any help will be much appreciated.
Upvotes: 0
Views: 1665
Reputation: 15155
As was mentioned in the comments, if you just set password in a user serializer, your password will be saved in plaintext where Django expects a hash. So you need to do something like this
class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('id','username','email','password','is_active') def create(self, validated_data): user = super().create(validated_data) if 'password' in validated_data: user.set_password(validated_data['password']) user.save() return user
Upvotes: 1