如何使用SOCIAL_AUTH_PROCESS_EXCEPTIONS设置

时间:2012-04-24 08:51:40

标签: python django django-socialauth

我正在通过django-socialauth在支持Facebook协会的网站上工作。该库很有效,除非有时我需要处理'已在使用的帐户'ValueError。

从django-socialauth的documentation(搜索“例外”)看来,存在SOCIAL_AUTH_PROCESS_EXCEPTIONS设置以指定异常处理程序。所以我创建了一个虚函数:

SOCIAL_AUTH_PROCESS_EXCEPTIONS = 'myapp.utility.process_exceptions'

但是当我启动ValueError时,处理程序永远不会被调用。有没有人有过使用这个关键的SOCIAL_AUTH_PROCESS_EXCEPTIONS的经验?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我认为您最好的选择是修改身份验证管道并创建自己的此函数版本,该版本位于social_auth / backend / pipelines / associate.py中:

def associate_by_email(详情,* args,** kwargs):     msgstr“”“返回用户条目,其电子邮件地址与详细信息相同。”“     email = details.get('email')

warn_setting('SOCIAL_AUTH_ASSOCIATE_BY_MAIL', 'associate_by_email')

if email and setting('SOCIAL_AUTH_ASSOCIATE_BY_MAIL', True):
    # try to associate accounts registered with the same email address,
    # only if it's a single object. AuthException is raised if multiple
    # objects are returned
    try:
        return {'user': User.objects.get(email=email)}
    except MultipleObjectsReturned:
        raise AuthException(kwargs['backend'], 'Not unique email address.')
    except User.DoesNotExist:
        pass

如果您更换此行:
提高AuthException(kwargs ['backend'],'不是唯一的电子邮件地址。')
对于传递语句,如果数据库中存在重复的电子邮件(意味着它无法与任何特定帐户关联),它将不会尝试通过电子邮件关联,而是传递给管道中的下一个项目。最终,这应该会导致创建一个新帐户。