Django 如何在python social auth中向用户显示有意义的登录错误消息?

Django 如何在python social auth中向用户显示有意义的登录错误消息?,django,python-social-auth,Django,Python Social Auth,我正在Django 1.6中使用python social auth,一切正常 我定义了SOCIAL\u AUTH\u LOGIN\u ERROR\u URL,指向我应用程序中的一个视图,当登录未按计划进行时向用户显示错误 我的系统不允许创建新用户。您必须首先使用常规凭据登录您的帐户,将您的帐户与社交帐户关联,然后才能使用社交身份验证机制登录 如果用户试图使用未向我的系统中的用户注册的社交帐户登录我的系统,我希望显示自定义消息。问题是,位于SOCIAL\u AUTH\u LOGIN\u ERRO

我正在Django 1.6中使用
python social auth
,一切正常

我定义了
SOCIAL\u AUTH\u LOGIN\u ERROR\u URL
,指向我应用程序中的一个视图,当登录未按计划进行时向用户显示错误

我的系统不允许创建新用户。您必须首先使用常规凭据登录您的帐户,将您的帐户与社交帐户关联,然后才能使用社交身份验证机制登录

如果用户试图使用未向我的系统中的用户注册的社交帐户登录我的系统,我希望显示自定义消息。问题是,位于
SOCIAL\u AUTH\u LOGIN\u ERROR\u URL
的视图没有收到有关错误可能是什么的任何信息。我只能说“尝试登录时出错。”


当发生特定错误时,我如何捕获此类错误并向用户显示自定义消息?

看看django_应用程序中的中间件:


并在此基础上创建自己的,或通过重写来扩展。如前所述,可能是get_message方法

要处理此问题,我将执行以下操作:

设置.py

...
SOCIAL_AUTH_PIPELINE = (
    'social.pipeline.social_auth.social_details',
    'social.pipeline.social_auth.social_uid',
    'social.pipeline.social_auth.auth_allowed',
    'social.pipeline.social_auth.social_user',
    'social.pipeline.social_auth.associate_user',
    'social.pipeline.social_auth.load_extra_data',
    'social.pipeline.user.user_details',
    # the custom pipeline step
    'accounts.views.user_details_after',
)
...
def user_details_after(strategy, details, user=None, *args, **kwargs):
    if not user:
        messages.info(strategy.request, "You have to sign up first.")
视图.py

...
SOCIAL_AUTH_PIPELINE = (
    'social.pipeline.social_auth.social_details',
    'social.pipeline.social_auth.social_uid',
    'social.pipeline.social_auth.auth_allowed',
    'social.pipeline.social_auth.social_user',
    'social.pipeline.social_auth.associate_user',
    'social.pipeline.social_auth.load_extra_data',
    'social.pipeline.user.user_details',
    # the custom pipeline step
    'accounts.views.user_details_after',
)
...
def user_details_after(strategy, details, user=None, *args, **kwargs):
    if not user:
        messages.info(strategy.request, "You have to sign up first.")

在登录模板中,我呈现消息以将其显示给用户。

据我所知,在使用python social auth时,身份验证需要用户权限。。。除非你没有提供正确的密码,否则你将无法通过社交网站登录页面。@krystian:我也有同样的问题。您可以在哪里修复此问题?@udo为了处理用户尚未关联的情况,我拖动了
social.pipeline.social\u auth.social\u user
管道步骤,并添加了我自己的自定义
social\u user
步骤。我的版本是原始版本的副本,只是做了一个调整。它处理
get\u social\u auth
不返回值且
social
变量为
None
的情况。在这种情况下,它会显示我自己的自定义视图,告诉用户该帐户尚未关联。我对管道中包含的现有用户进行了自定义检查。我如何抛出一个异常,以便PSA捕获它并用异常消息重定向到社交网站\u身份验证\u登录\u错误\u URL?