Django:在通过社交身份验证创建用户时引发错误时进行干预

Django: Intervention when raising errors when creating User via social authentication

我正在使用包 social-auth-app-django 设置社交身份验证。在未提供电子邮件的情况下尝试创建用户时,出现以下 ValueError。

users.py

    if not email:
        message = "Ooops, it doesn\'t look like an email was specified. If you are signing in via one of your social media account, please ensure there is an email address associated to your account."
        raise ValueError(message)

最初并没有必要,因为我会使用标准表单验证在前端处理表单验证。但是,在集成社交登录时,这会导致问题。在开发中这很好——但基本上在这个阶段我想将错误返回到一个错误模板,该模板说他们必须提供一个电子邮件地址。我相信在 Twitter 等平台上,用户最初可以在没有与帐户关联的电子邮件地址的情况下进行注册。这就是我发现这场冲突的地方。本质上,social-auth-app-django 在此之前不会抛出错误 - 那么在这一点上,我如何将用户发送回指定的模板,我可以构建该模板以通过上下文将它们传回来处理此类错误?

查看并查看文档,我看不到任何我可以自信的东西 运行...任何建议将不胜感激!

python-social-auth 模块支持管道 - 因此在 settings.py 中的 SOCIAL_AUTH_PIPELINE 末尾定义一个方法,然后在 pipeline.py 中实现它当您的用户没有与其社交用户关联的电子邮件时,将为您提供一种定义所需行为的方法:

SOCIAL_AUTH_PIPELINE = (
    # any other pipeline handlers ...                                            
    'custom.signup.pipeline.prevent_without_email'
)

然后在您的 custom/signup/pipeline.py 中,您需要为 prevent_without_email 实现实际的部分 - 您可以在此处查看更多详细信息 http://python-social-auth-docs.readthedocs.io/en/latest/pipeline.html

如果您需要特定的处理程序,您可以使用 Django 信号 - 在 signals.py 中创建一个信号,在 pipeline.py 中发出它并让 callbacks.py 中的处理程序处理它,未指定电子邮件时。