如何在django

时间:2016-11-09 13:19:01

标签: python django

我在我的项目中使用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')

是否可以加密此密码或使用加密密码登录,或者如果它有其他解决方案则会很好。

2 个答案:

答案 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',
]