Django Social Auth - 我无法重置通过Facebook签名的用户的密码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django Social Auth - 我无法重置通过Facebook签名的用户的密码相关的知识,希望对你有一定的参考价值。
我有一个非常奇怪的问题,我无法搞清楚。
在我的网站上,我可以选择让用户通过普通注册页面或Facebook社交身份验证注册 - 我正在使用Python / Django的Social Auth App。
用户可以成功注册任何一种方式。
如果用户通过正常注册方法注册并输入用户名和电子邮件和密码---如果需要,他们可以通过密码重置页面成功触发密码重置。
但是,如果用户通过Facebook AUTH注册,则在创建用户配置文件后,如果他们输入其电子邮件进行密码重置,则不会生成EMAIL。
以下是我在settings.py中为auth应用设置的设置。
AUTH_USER_MODEL = "accounts.User"
SOCIAL_AUTH_USER_MODEL = 'accounts.User'
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS =
'fields': 'id,name,email',
SOCIAL_AUTH_SLUGIFY_USERNAMES = True
SOCIAL_AUTH_PIPELINE = (
'social_core.pipeline.social_auth.social_details',
'social_core.pipeline.social_auth.social_uid',
'social_core.pipeline.social_auth.auth_allowed',
'social_core.pipeline.social_auth.social_user',
'social_core.pipeline.user.get_username',
'social_core.pipeline.social_auth.associate_by_email', # <--- enable this one
'social_core.pipeline.user.create_user',
'social_core.pipeline.social_auth.associate_user',
'social_core.pipeline.social_auth.load_extra_data',
'social_core.pipeline.user.user_details',
)
正如您所看到的那样,我正在强调用户名,因此填充了所有字段。
这是我的用户模型
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True, error_messages='unique':"This email has already been registered.")
username = models.CharField(max_length=40, default='')
first_name = models.CharField(max_length=40, default='', blank=True)
last_name = models.CharField(max_length=40, default='', blank=True)
date_joined = models.DateTimeField(default=timezone.now)
favorites = models.ManyToManyField(Deal, related_name='favorited_by', null=True, blank=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
任何人都可以看到我在这里可能遗漏的任何内容 - 或者为什么这些电子邮件不会被触发?
默认情况下,Django会在用户记录上设置一个不可用的密码,默认情况下Django也不允许你重置这些用户密码,因为你需要实现自己版本的重置机制(你应该可以扩展) Django内置于)。
python-social-auth
不处理密码或密码重置。
您需要覆盖类auth_views.PasswordResetForm示例的get_users方法
class yourOverriding(auth_views.PasswordResetForm):
def get_users(self, email):
"""Given an email, return matching user(s) who should receive a reset.
This allows subclasses to more easily customize the default policies
that prevent inactive users and users with unusable passwords from
resetting their password.
"""
active_users = UserModel._default_manager.filter(**
'%s__iexact' % UserModel.get_email_field_name(): email,
'is_active': True,
)
d = (u for u in active_users)
return d
以上是关于Django Social Auth - 我无法重置通过Facebook签名的用户的密码的主要内容,如果未能解决你的问题,请参考以下文章
python-social-auth AuthCanceled 异常
Django开发social-auth-app-django 第三方登陆-魏泯
Python Social Auth Django 模板示例
在 Django Rest Framework + Django Social Auth 中连接 Facebook
python-social-auth with Django: ImportError: No module named 'social_django'