2

ユーザーがDBからログインできるカープールWebサイトがあり、すべてが正常に機能しています。

ログインすると、ユーザーは相乗りの広告を投稿できます。

今、私が必要としているのは、ユーザーが Facebook からログインすることです。そのようなシナリオはどのように処理されますか?

ケース 1: ユーザーは自分の DB に登録されておらず、Facebook 資格情報を使用しています。読み取り専用のページを表示することはできますが、ユーザーが広告を投稿したい場合、この場合はどうすればよいでしょうか?

私の DB は、postAd テーブルが外部キーとして user_id を持つように構造化されているため、この場合、その email_id とダミーのパスワードを持つユーザーを追加して、投稿を許可する必要がありますか? または、そのようなシナリオはどのように処理されますか?

ケース 2: ユーザーが Facebook を使用してログインする場合、そのユーザーを見つけるためにその電子メール ID で DB を検索する必要がありますか?

私はSpring Securityを使用しています。

そのようなウェブサイトは一般的にどのように機能しますか?

ありがとう。

4

2 に答える 2

2

SpringSocialおよびSpringSocialのFacebookプロジェクトをご覧ください。彼らはします:

  1. ケース1の場合:暗黙的なサインアップ機能があります。FB接続が確立されたが、DBに対応するユーザーがいない場合に呼び出されるConnectionSignUp実装を提供する必要があります。ここで新しいDBユーザーを作成できます。
  2. ケース2の場合:SignInAdapterインターフェイスがあります(ProviderSignInControllerの依存関係の章を参照 )。userIdでDBユーザーを検索し、認証を準備してSecurityContextHolderに挿入できます。

一般的なアイデア:複数のプロバイダー(FB、Twitterなど)を使用できますが、いずれの場合も、各ソーシャルプロファイルはSpring Securityユーザー(承認などに使用されます)と照合されます。それらがuserIdで一致する場合、複数のソーシャルアカウントに対して1人のSpringSecurityユーザーを持つことができます。このアプローチの利点は、ユーザープロファイルをより細かく制御できることです(FBアカウントがアクティブな場合でも、ローカルユーザーアカウントを無効にできます)。JavaコードからFacebookAPIを使用できます。

オプション2として、JavaScriptを介してFBログインを行うことができます。次に、ケース1とケース2の2つの機能を手動で(たとえば、カスタムフィルターを介して)実装します。より軽量な場合があります(必要な機能によって異なります)。

于 2013-03-12T09:53:29.633 に答える
1

Facebook Oauth は、各ユーザーに一意のユーザー ID を提供します。そのため、ユーザーが Facebook を使用してサインインする場合は、ID、名前、電子メールなどのユーザーの詳細をユーザー テーブルに保存することをお勧めします。したがって、そのユーザー ID を主キーとして使用できます...この部分をスキップして投稿ページに移動します..

于 2013-03-13T06:24:32.770 に答える