Django Social Auth - 我无法重置通过Facebook签名的用户的密码

问题描述 投票:0回答:2

我有一个非常奇怪的问题,我无法搞清楚。

在我的网站上,我可以选择让用户通过普通注册页面或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']

任何人都可以看到我在这里可能遗漏的任何内容 - 或者为什么这些电子邮件不会被触发?

python django python-social-auth django-socialauth
2个回答
2
投票

默认情况下,Django会在用户记录上设置一个不可用的密码,默认情况下Django也不允许你重置这些用户密码,因为你需要实现自己版本的重置机制(你应该可以扩展) Django内置于)。

python-social-auth不处理密码或密码重置。


0
投票

您需要覆盖类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
© www.soinside.com 2019 - 2024. All rights reserved.