如何解决具有自定义django用户模型的python-social-auth-自定义用户创建和登录逻辑 场景1 场景2 场景3 场景4 user / models / customuser.py managers.py
我在Django 3.1中使用python-social-auth
我想使用以下逻辑/场景允许社交登录网站:
场景1
使用社交登录名登录(用户之前未登录,并且数据库中没有电子邮件)
场景2
场景3
使用社交登录名登录(用户之前未使用其他社交提供者登录,但提供了相同的电子邮件[即,用户将同一封电子邮件用于多个社交提供者])
场景4
通过管理控制台或命令行创建用户
这是我的代码:
user / models / customuser.py
from socialengagement.models import SocialItem
class CustomUser(SocialItem,AbstractUser):
email = models.EmailField(_('email address'),unique=True)
USERNAME_FIELD = 'email'
required_FIELDS = ['username']
objects = CustomUserManager()
# other fields continue ...
managers.py
from django.contrib.auth.base_user import BaseUserManager
from django.contrib.auth import get_user_model
from django.utils.translation import ugettext_lazy as _
from django.db import IntegrityError
from django.db.transaction import TransactionManagementError
from random import randrange
class CustomUserManager(BaseUserManager):
"""
Custom user model manager where email is the unique identifiers
for authentication instead of usernames.
"""
def create_user(self,email,password=None,username=None,**extra_fields):
"""
Create and save a User with the given email and password.
"""
if not email:
raise ValueError(_('The Email must be set'))
email = self.normalize_email(email)
# how to determine if username is from social login,or from
# admin page/create_superuser() ?
#
# username = f"{randrange(MAX_ID_COUNT)}".zfill(MAX_LEN)
if username:
extra_fields['username'] = username
user = self.model(email=email,**extra_fields)
user.set_password(password)
try:
user.save()
except (IntegrityError,TransactionManagementError) as e:
# do something
pass
return user
def create_superuser(self,password,username,**extra_fields):
"""
Create and save a SuperUser with the given email and password.
"""
extra_fields.setdefault('is_staff',True)
extra_fields.setdefault('is_superuser',True)
extra_fields.setdefault('is_active',True)
if extra_fields.get('is_staff') is not True:
raise ValueError(_('Superuser must have is_staff=True.'))
if extra_fields.get('is_superuser') is not True:
raise ValueError(_('Superuser must have is_superuser=True.'))
return self.create_user(email,**extra_fields)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。