首页 > 解决方案 > 使用电话号码注册 Django

问题描述

我在后端有一个 Django 项目和一个 Django REST,在客户端有一个 vue js。我想使用我的电话号码进行注册和登录质量。如果有人早点这样做,我很抱歉,我该怎么做?我会很高兴你的建议,对不起我的英语。

使用 Django-phone-login 时出错:

文件“/home/c2dent/django/afmoon/backend/afmoon/urls.py”,第 24 行,在 url(r'^phone_login/', include('phone_login.urls', namespace='phone_login'),),文件“/home/c2dent/django-trunk/django/urls/conf.py”,第 39 行,在 include 'Specifying a namespace in include() without an app_name' django.core.exceptions.ImproperlyConfigured: Specifying a namespace in in不支持不提供 app_name 的 include()。在包含的模块中设置 app_name 属性,或者传递一个包含模式列表和 app_name 的 2 元组。c2dent@c2dent:~/django/afmoon/backend$ python3 manage.py makemigrations SystemCheckError: 系统检查发现一些问题: ERRORS: : (admin.E108) 'list_display[0]' 的值是指 'phone_number',

标签: djangodjango-modelsvue.jsdjango-rest-frameworkdjango-views

解决方案


您可能想为此编写自己的身份验证后端。

首先在项目设置中说明您的自定义后端路径。

AUTHENTICATION_BACKENDS = ('core.backends.EmailOrPhoneModelBackend',)

然后在单独的文档“backends.py”中,您可以编写自己的逻辑。下面是我自己的解决方案。

from django.contrib.auth.backends import ModelBackend
from .models import MyUser


class EmailOrPhoneModelBackend(ModelBackend):

#This is a ModelBacked that allows authentication with either a username or an email address.

def authenticate(self, username=None, password=None):
    if '@' in username:
        kwargs = {'email': username}
    else:
        kwargs = {'phone': username}
    try:
        user = MyUser.objects.get(**kwargs)
        if user.check_password(password):
            return user
    except MyUser.DoesNotExist:
        return None

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

以上是使用电子邮件或电话号码注册的解决方案。


推荐阅读