英文:
django rest framework authenticate keep returning NONE
问题
Here's the translation of the code portion you provided:
身份验证一直返回None,即使我确保数据库中的用户名和密码是正确的。我也检查了这些问题[1]和[2],但没有帮助。
以下是我的代码:
views.py
@api_view(['POST'])
def user_login(request):
print("我在登录")
print(request)
if request.method == 'POST':
name = request.data.get('name')
password = request.data.get('password')
print("用户名:", name, "密码:", password)
user = authenticate(username=name, password=password)
print("用户:", user)
if user is not None:
# 验证成功
login(request, user)
return Response({'message': '登录成功'})
else:
# 验证失败
return Response({'message': '无效的凭据'})
else:
# 渲染登录表单
return Response({'message': '无效的请求方法'})
serializer.py:
def create(self, validated_data):
user = user_auth.objects.create(
email=validated_data['email'],
name=validated_data['name'],
password=make_password(validated_data['password'])
)
return user
models.py:
class user_auth(models.Model):
name = models.CharField(max_length=80)
email = models.EmailField()
password = models.CharField(max_length=15)
created = models.DateField(auto_now_add=True)
这是数据库中的哈希密码:
[![在此输入图片描述][3]][3]
我不知道我做错了什么。
[1]: https://stackoverflow.com/questions/15557196/authenticate-always-returns-none?rq=3
[2]: https://stackoverflow.com/questions/18778061/authenticate-function-not-working-django-contrib-auth
[3]: https://i.stack.imgur.com/0ckHs.jpg
Please note that the translation is provided for the code portion only, as per your request.
英文:
authenticate keep returning none even I'm sure from the name and the password in database and I write them right . I also check these questions, 1 and 2 but didn't help .
here is my code .
views.py
@api_view(['POST'])
def user_login(request):
print("im in login")
print(request)
if request.method == 'POST':
name = request.data.get('name')
password = request.data.get('password')
print("username : ",name,"password : ",password)
user = authenticate(username=name, password=password)
print("user : ",user)
if user is not None:
# Authentication successful
login(request, user)
return Response({'message': 'Login successful'})
else:
# Authentication failed
return Response({'message': 'Invalid credentials'})
else:
# Render the login form
return Response({'message': 'Invalid request method'})
serializer.py :
def create(self, validated_data):
user = user_auth.objects.create(
email=validated_data['email'],
name=validated_data['name'],
password = make_password(validated_data['password'])
)
return user
models.py
class user_auth(models.Model):
name = models.CharField(max_length=80)
email = models.EmailField()
password = models.CharField(max_length=15)
created = models.DateField(auto_now_add=True)
here is the hashed password in database
答案1
得分: 0
我已经让它工作了,以下是我所做的更改:
首先,我在设置中添加了这一行,如果您没有添加它,默认情况下身份验证将尝试在auth_user
中搜索用户,而不是在您的自定义用户中搜索:
AUTH_USER_MODEL = 'base.user_auth'
(将base
更改为您的应用程序的名称)。
其次,我不得不将模型更改为继承自AbstractUser
,而不是model.Model
(我还添加了用户名字段和unicode
函数,尽管我认为它们并不是非常必要的):
class user_auth(AbstractUser):
email = models.EmailField()
password = models.CharField(max_length=15)
created = models.DateField(auto_now_add=True)
USERNAME_FIELD = 'username'
def __unicode__(self):
return self.username
对于视图和序列化器,我没有做任何更改。
英文:
I made it work , here is what I changed .
first I added this line to the settings if you didn't add it authenticate by defaul will try to search for the user in auth_user and not in your custom user :
`AUTH_USER_MODEL = 'base.user_auth'` (change base by the name of your app).
Second thing I had to change model by inherits from AbstractUser and not model.Model (and I also add username field and unicod function even tho i don't thing they are so much necessary ):
class user_auth(AbstractUser):
email = models.EmailField()
password = models.CharField(max_length=15)
created = models.DateField(auto_now_add=True)
USERNAME_FIELD = 'username'
def __unicode__(self):
return self.username.
For view and serializer didn't change anything.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论