1

匿名で使用できるサービスを構築していますが、ユーザーは自分の Facebook や Twitter のプロフィールでコンテンツを共有できます。アプリケーションを承認したら、ユーザーに関する基本情報を保存し、それをユーザーが共有しているコンテンツにリンクしたいと考えています。

通常、サービスは使用前に認証を必要とするため、この問題は解決しますが、私の場合、認証は最後の段階で行われ、4 つのパスに分割されます。

  1. 【フェイスブック+ツイッター】
  2. 【フェイスブック単独】
  3. 【ツイッター単独】
  4. [何もない]

ただし、上記を実行すると、データベースに冗長なデータが作成されます。つまり、Facebook 情報と Twitter 情報が別々のテーブルにあり、それらの間のリンクや投稿との関係はありません。

  • これを防ぐ最善の方法は何ですか?解決策はデータ モデリング レベルですか? それともコードレベルで?または両方?

  • これは以前に行われたことがありますか?

アカウント データのマージを行う方法のフローチャートを作成しましたが、このプロセスでは非常に長い FacebookID \ TwitterID を使用してエントリを検索する必要があるため、データベース レベルでオーバーヘッドが発生する可能性があります。

  • 追加情報が必要な場合は、コメントに記載してください。

ありがとうございました

4

1 に答える 1

0

これを処理する方法は、アプリケーションで使用される認証の概念からユーザーIDの概念を分離することです。たとえば、データ モデル レベルでは、Users テーブルに基本的なユーザー情報を格納し、Authentications テーブルに特定の認証プロバイダーに関連付けられたユーザー資格情報/トークンを格納します。コード レベルでは、サード パーティの認証に固執する場合は、アプリケーションがさまざまな OAuth プロバイダーを直接処理する必要がないように保護できるレイヤーを構築することを検討することをお勧めします。

Ruby/Rails の世界では、これはユーザー ID を管理するDevise (ビルトインのユーザー名/パスワード認証も可能ですが、それに興味があるようには思えません) とOmniAuthの組み合わせによって実現されます。複数のプロバイダー。

両方を組み込んだサンプル アプリケーションは、Devise + OmniAuthで入手できます。最後に、この件に関する RailsCast はこちら: OmniAuth Part 1

あなたが Ruby/Rails で作業していないことは承知していますが、これらの資料は、あなたが達成しようとしているアーキテクチャのインスピレーションを提供してくれるかもしれません。

于 2013-04-10T23:07:50.403 に答える