Django 管理员使用employee_id 或电子邮件或电话号码登录

时间:2021-05-07 09:31:00

标签: python-3.x django authentication django-admin

我在自定义用户模型中设置了 USERNAME_FIELD="email"。 我创建了自定义后端身份验证类。 代码如下:

class EmailBackend(ModelBackend):
    
    def authenticate(self, request, username=None, password=None, **kwargs):
        UserModel = get_user_model()
        try:
            user = UserModel.objects.get(
                Q(employee_id=username) | Q(email=username) | Q(phone=username)
            )
        except UserModel.DoesNotExist:
            return None
        return user if user.check_password(password) else None

    def get_user(self, user_id):
        try:
            UserModel = get_user_model()
            user = UserModel.objects.get(pk=user_id)
        except UserModel.DoesNotExist:
            return None
        return user if self.user_can_authenticate(user) else None

我只能用电话号码和employee_id登录(仅当employee_id作为数值输入时,例如1234,否则也不能用它登录)。 对于其他两个它显示错误:int() 的无效文字以 10 为基数

0 个答案:

没有答案
相关问题