Django 社交身份验证如何获得许可或死于尝试

Django social auth how to get permission or die trying

在我的应用程序中,我需要为每个用户提供一封电子邮件。 Facebook 不将其作为 public 个人资料的一部分提供给我,这对我来说很不方便。所以我请求许可:

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'public_profile']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
    'fields': 'id,name,email', 
}

现在,用户可以选择不授予电子邮件权限。我想在不授予此权限的情况下进行注册。我该怎么做?

您需要add function to the authentication pipeline that enforces the email requirement or raises AuthForbidden。这是一个例子:

from social_core.exceptions import AuthForbidden


def email_required(backend, details, user=None, *args, **kwargs):
    if details.get('email') or user and user.email:
        return
    else:
        raise AuthForbidden(backend)

您需要在创建用户或社交关系之前放置该功能,因此在 social_uid 之后应该没问题。