1

私は、django-socialauth を介して Facebook の関連付けをサポートする Web サイトに取り組んでいます。このライブラリは、「アカウントが既に使用されている」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にあるこの関数の独自のバージョンを作成することだと思います。

defassociate_by_email(details、* args、** kwargs):"""詳細で返されたものと同じメールアドレスでユーザーエントリを返します。"""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

この行を置き換える場合:
passステートメントに対してAuthException(kwargs ['backend']、'Not unique email address。')
を発生させ、データベースに重複する電子メールがある場合(つまり、特定のアカウントに関連付けることができない) 、電子メールでの関連付けを試みず、代わりにパイプラインの次のアイテムに渡します。最終的には、これにより新しいアカウントが作成されるはずです。

于 2012-05-30T12:21:24.363 に答える