3

私はdjangoでpython-social-authを使用しています。Facebook経由で承認したいのですが、以前、Facebookが使用するメールをデフォルトの方法(メール、パスワード)で登録しました。Facebookアカウントを登録済みアカウントに関連付けることはできますか? 検索してみましたが、何もありません

4

1 に答える 1

6

Associate users by emailを確認してください。その方法が説明されています。

メールでユーザーを関連付ける

電子メールが既にユーザー アカウントと一致している場合、ソーシャル アカウントが自動的に関連付けられることが望ましい場合があります。

たとえば、ユーザーが Facebook アカウントでサインアップしてからログアウトし、次に Google OAuth2 を使用してログインしようとした場合、(両方のソーシャル サイトに同じメール アドレスが設定されている場合) ユーザーが最初のアカウントにアクセスできると便利です。 Facebook バックエンドによって作成されたアカウント。

このシナリオは、次のように Associate_by_email パイプライン関数を有効にすることで可能になります。

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.auth_allowed',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.social_auth.associate_by_email',  # <--- enable this one
    'social_core.pipeline.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
)

すべてのバックエンドでこのプロセスを自動化することは 100% 安全ではないため、この機能はデフォルトで無効になっています。すべてのプロバイダーがあなたのメール アカウントを検証するわけではなく、他のユーザーがそれを利用する可能性があります。

たとえば、ユーザー A がメール foo@bar.com でサイトに登録されているとします。その後、悪意のあるユーザーは、同じアカウントで自分の電子メールを検証しない別のプロバイダーに登録します。最後に、このユーザーはあなたのサイト (そのプロバイダーをサポートしている) にアクセスしてサインアップします。メールは同じであるため、悪意のあるユーザーはユーザー A のアカウントを制御します。

編集:修正およびコピーされたドキュメントの詳細をこの回答にリンクします。

于 2014-02-18T16:14:24.030 に答える