我在我的项目中使用django.contrib.auth进行身份验证,工作正常,现在我必须处理一个模块,其中超级成员必须登录其成员的帐户,他应该拥有他们帐户的所有访问权限,
所以我必须使用会员的电子邮件ID登录,并在注册会员时由django Auth自动保存加密密码。
user_existence = User.objects.filter(email=request.POST['email']).first()
if user_existence:
email = user_existence.email
password = user_existence.password
user = authenticate(username=email, password=password)
if user is not None:
login(request, user)
return HttpResponse('user_connected')
return HttpResponse('user_auth_failed')
是否可以加密此密码或使用加密密码登录,或者如果它有其他解决方案则会很好。
答案 0 :(得分:2)
您只需使用
以特定用户身份登录即可user = User.objects.get(email=request.POST['email'])
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)
无需运行authenticate()
。
答案 1 :(得分:0)
Django 2.x
您可以创建自定义身份验证后端,并覆盖其身份验证方法以使用哈希密码和用户名进行身份验证
# backends.py
from django.contrib.auth import backends, get_user_model
UserModel = get_user_model()
class HashedPasswordAuthBackend(backends.ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
if username is None:
username = kwargs.get(UserModel.USERNAME_FIELD)
else:
user = UserModel.objects.get(username=username)
if user.password == password and self.user_can_authenticate(user):
return user
return super().authenticate(request, username, password, **kwargs)
然后在您的项目 settings.py
中包含此身份验证后端AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'yourapp.backends.HashedPasswordAuthBackend',
]