这是我的views.py文件
def user_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
return redirect('user_home_url')
else:
messages.info(request, 'invalid username and password')
return redirect('user_login_url')
<块引用>
models.py
class User(AbstractBaseUser, PermissionsMixin):
"""Database Model for storing users profile"""
first_name = models.CharField(max_length = 15)
last_name = models.CharField(max_length = 15)
email = models.EmailField(max_length = 35, unique = True)
username = models.CharField(max_length = 35, unique = True)
is_active = models.BooleanField(default = False)
is_staff = models.BooleanField(default = False)
password = models.CharField(max_length = 25)
phone = models.CharField(max_length = 13, null = False, blank = False, unique = True)
phone_verified = models.BooleanField(default = False)
otp = models.IntegerField(null = True)
objects = UserProfileManager()
USERNAME_FIELD='username'
REQUIRED_FIELDS=['password','email','phone','first_name','last_name']
def get_full_name(self):
"""return full name of user"""
return self.first_name + self.last_name
def __str__(self):
"""return string representation of user"""
return self.email
settings.py
AUTH_USER_MODEL = 'Users.User'
<块引用>
使用身份验证方法尝试了不同的方法,但总是得到无效的用户名和密码
def user_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
users = User.objects.all()
for user in users:
if user.email == email and user.password == password:
return redirect('user_home_url')
<块引用>
当我在 views.py 中使用此代码而不是“身份验证”方法时,它运行良好,但问题是我无法使用 @login_required
<块引用>抱歉问了这么愚蠢的问题,我是菜鸟,这是我的第一个问题
答案 0 :(得分:0)
这将永远不会起作用,因为密码不会以纯文本形式保存在数据库中,因此您无法将收到的密码与保存的密码进行比较
最简单的方法是
git config credential.helper
答案 1 :(得分:0)
您提到当您将提交的密码与 user.password
进行比较时,它“完美运行”。这表明您已将密码以纯文本形式存储在数据库中。
您确实需要养成散列密码的习惯。 Django 可以为您处理这个问题,因为 AbstractBaseUser
有一个 set_password
方法:
# Set a password manually
user.set_password('newpassword')
一旦您正确保存了密码,auth.authenticate
方法应该可以满足您的预期。
如果您对密码散列感兴趣,Django 文档在 password management 上有一个很棒的页面。