1

我正在开发一个通过 django-socialauth 支持 Facebook 关联的网站。该库运行良好,除非有时我需要处理“帐户已在使用”ValueError。

从 django-socialauth 的文档(搜索“异常”)中可以看出,存在 SOCIAL_AUTH_PROCESS_EXCEPTIONS 设置以指定异常处理程序。所以我创建了一个虚拟函数:

SOCIAL_AUTH_PROCESS_EXCEPTIONS = 'myapp.utility.process_exceptions'

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

非常感谢!

4

1 回答 1

0

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

def associate_by_email(details, *args, **kwargs): """返回与 details 中返回的电子邮件地址相同的用户条目。""" 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

如果您替换此行:
raise AuthException(kwargs['backend'], 'Not unique email address.')
for a pass statement,那么如果数据库中有重复的电子邮件(意味着它不能关联到任何特定帐户) ,它不会尝试通过电子邮件关联,而是传递到管道中的下一个项目。最终,这应该会导致创建一个新帐户。

于 2012-05-30T12:21:24.363 回答