0

Facebook経由でユーザーをログインしようとしています。同じためにdjango-social-authを使用しました。テストプロジェクトと正常に統合しました。ただし、ユーザーをdjango認証ユーザーにマップする方法についてはわかりません。より正確に言うと、たとえば、Facebook 経由でユーザーを認証するとします。セッションが終了すると、ユーザーはログアウトします。ユーザーが 2 回目に戻ってきたとき、再び facebook を介して、どうすればそれが同じユーザーであるかを知ることができますか? ユーザー名は変更できるため、Facebookのユーザー名を使用できません! 明らかな理由で、ユーザーの電子メール ID を使用できません。Facebook から送信されたデータのどの識別子を、特定のユーザーに対して一意であると見なす必要がありますか? facebook から送信された応答のキーは次のとおりです。

['username', 'bio', 'first_name', 'last_name', 'verified', 'name', 'locale', 'hometown', 'work', 'expires', 'sports', 'languages', 'quotes', 'link', 'location', 'gender', 'access_token', 'timezone', 'education', 'updated_time', 'id']

ただし、私にとって最も明白な答えは、「id」を使用してユーザーを識別することですが、Facebook がすべてのデータを新しいサーバーに移動し、ユーザーに関連付けられた「id」フィールドが変更される可能性はどのくらいですか? その場合、別のユーザーの以前の ID と同じ ID を取得すると、変更された ID を持つユーザーが別のユーザーのデータにアクセスする可能性があります。Facebookではユーザー名を1回だけ変更できるため、おそらく「id」と「username」の組み合わせを使用できます。しかし、彼らがこの制限を取り除けば、私の論理は破綻します。私は OAuth2 にまったく慣れていないので、ばかげているように聞こえる場合は、私の無知をお許しください。少し調べてみましたが、巨大なチュートリアルで迷子になりました! 人々は一般的にこれをどのように処理しますか?

編集: 重複としてリンクされている質問への回答は、Facebook 側で変更された ID に対処する方法についての私の質問には答えません。まれなケースではありますが、特にFacebook側で変更が発生し、私が制御できないため、可能性を排除することはできません. さらに、それがいつ変化するかについての通知さえありません。もしそんなことが起こったら、私のアプリのユーザーのセキュリティが危険にさらされます! OAuth2は一種の標準なので、一意の識別子に関するガイドラインはありますか? プロバイダーがユーザー ID を変更できないようにするガイドラインはありますか?

4

1 に答える 1

0

Django socialauth プラグインはそれをすべて行います。私の記憶が正しければ (3 年前のあるプロジェクトでそれを使用したことから)、socialauth には Facebook などの他の環境でユーザーをアカウントに結び付けるための独自のモデルがあります。

私がそれをしたとき、私はアプリのユーザーをFacebookまたはGmailのユーザーに結びつけるためのこの一意のキーとして彼らの電子メールアドレスを使用しました。

このファイルを見てください: https://github.com/omab/django-social-auth/blob/master/social_auth/db/django_models.py

それらの参照を保存するためのモデルがあります。

アラン

于 2013-06-24T16:44:08.987 に答える