Django us中的多个登录字段

2024-04-25 22:47:45 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用Django user时,是否可以使用多个登录字段? 比如在Facebook,我们可以使用用户名、电子邮件和电话号码登录。在


Tags: djangofacebook电子邮件电话号码用户名user
1条回答
网友
1楼 · 发布于 2024-04-25 22:47:45

是的,是的!您可以编写自己的身份验证后端,如本节所述: https://docs.djangoproject.com/en/1.8/topics/auth/customizing/

我们假设您已经创建了一个应用程序帐户/您在其中扩展了附加电话字段的用户模型。 创建身份验证后端后端.py在帐户内/并编写您自己的身份验证逻辑。例如:

from account.models import UserProfile
from django.db.models import Q


class AuthBackend(object):
    supports_object_permissions = True
    supports_anonymous_user = False
    supports_inactive_user = False


    def get_user(self, user_id):
       try:
          return UserProfile.objects.get(pk=user_id)
       except UserProfile.DoesNotExist:
          return None


    def authenticate(self, username, password):
        try:
            user = UserProfile.objects.get(
                Q(username=username) | Q(email=username) | Q(phone=username)
            )
        except UserProfile.DoesNotExist:
            return None

        return user if user.check_password(password) else None

把你的自定义后端放在你的项目的设置.py公司名称:

^{pr2}$

然后只需在帖子的用户名字段中传递用户名、电子邮件或电话即可进行身份验证。在

from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            # Redirect to a success page.
        else:
            # Return a 'disabled account' error message
            ...
    else:
        # Return an 'invalid login' error message.
        ...

请参见:https://docs.djangoproject.com/fr/1.8/topics/auth/default/

相关问题 更多 >