27

OmniAuth との統合を検討している Rails アプリがいくつかありますが、最初に把握したい概念上の問題があります。次のシナリオを検討してください。

  1. アプリケーション Foo は、Twitter と Facebook を介した OmniAuth ログインをサポートしています。
  2. ジョーはあなたのサイトにアクセスし、彼の Twitter アカウントを介してログインします。これにより、Foo に新しいユーザーが作成され、この新しい Twitter 承認に関連付けられます。
  3. Joe は Foo からログアウトし、サイトのことを 6 か月間忘れます。
  4. Joe は、以前に Twitter でログインしたことを思い出さずに Foo に戻ります。
  5. Joe は Facebook でログインします。彼は元の Twitter 認証でまだログインしていないため、彼が実際に同じ Joe であることを検出する方法がなく、新しいアカウントが作成されます。
  6. ジョーは自分の古いアカウントを発見し、以前のコンテンツがこの古いアカウントに関連付けられていること、および Twitter と Facebook を交互にログインできないことに不満を感じています。

Twitter は Foo に電子メール アドレスを提供しないため、2 人の Joe が同じ Joe であることを検出するために使用する汎用識別子はありません。ユーザーの電子メール アドレスを提供するプロバイダーのみをサポートすることもできますが、ユーザーが別のプロバイダーで別の電子メール アドレスを使用して登録している場合、これは役に立ちません。

私が考えることができる他の唯一の解決策は、ユーザーに 2 つの既存のアカウントをマージする方法を提供することです。これは、OmniAuth を使用する場合に他のすべてが比較的簡単であることに比べて、大きな頭痛の種です。これが唯一の解決策である場合、これがどのように行われるかの例を示すガイド/チュートリアルに出くわした人はいますか? OmniAuth の人気を考えると、この問題があまり注目されていないことに驚いています。

ありがとう!

4

4 に答える 4

7

あなたの直感は正しいです。ユーザーにマージツールを提供する必要があります...または問題を無視できます。

于 2011-01-10T07:02:59.277 に答える
6

これは古い質問であることは知っていますが、参考のために、プロジェクトで最近行ったことで答えると思いました。

完全な開示: 私はこれを思いつきませんでした.私はそれをウェブ上の誰かから盗みました. Omniauth wiki に良い記事があります。

Facebook/Twitter/etc のアカウントを自動的にリンクする良い方法は見つかりませんでしたが、代わりに、ユーザーが最初のアカウントでログインした後に複数のアカウントをリンクできるようにしました。

これはシナリオです:

  • ユーザーは Facebook などでログインします。
  • アカウントに関連付けられているソーシャル ネットワークを一覧表示するプロファイル ページと、各タイプをアカウントにリンクするオプションがあります。
    • 例: "Facebook にリンク | Twitter にリンク | Google にリンク"
  • たとえば、ユーザーが Twitter にログインするために使用するのと同じ omniauth アクションへのリンクの「Link Twitter」
  • コールバック ハンドラーで、ユーザーがログインしているかどうかを確認します。
    • 存在する場合は、プロバイダーと uid をユーザーの別のレコードに保存します
    • それ以外の場合は、通常どおりログインします

プロバイダーと uid をユーザー モデルに格納する代わりに、モデルは、ユーザーが多くのソーシャル ネットワーク ID を持つことができるようになります。

繰り返しになりますが、死者を蘇らせて申し訳ありませんが、受け入れられた回答に対する阿部ペトリロのコメントは、別の見方が役立つかもしれないと思いました。

于 2013-01-05T07:46:58.113 に答える
3

今日もこの問題に遭遇しました。次のように処理すると思います。

ユーザーが選択した OmniAuth サービス (FB、Twitter など) から電子メールを取得しようとする従来の認証設定と同様に、サインアップ時にユーザーに電子メールとパスワードを要求します。そのため、認証プロバイダーから電子メールが提供されない場合にのみ、電子メールを提供する必要があります。その後、ユーザーがサインアップに使用したのと同じプロバイダーで後でサインインすると、すぐにログインされます。これは、おそらくすべてのケースの 99% で発生します。

ただし、ユーザーの電子メールとパスワードがあれば、発生する可能性のあるあらゆる種類のケース (説明したものを含む) も処理できます。

  • 元の認証プロバイダーがダウンしているか、ユーザーが認証プロバイダー アカウントを削除した -> 解決策: ユーザーは、電子メールとパスワードを使用して、従来の方法でログインできます。(これは重要なケースであり、まだネット上で言及されていないことに注意してください。人々は、FB や Twitter などは永遠に存在し、ダウンすることはなく、ユーザーはそれらのアカウントを終了することはないと想定しているようです。ユーザーの pw と email を保存しないと、これらのケースのいずれかが発生した場合にプロバイダーによって生成されたすべてのユーザー アカウントが失われ、それらをユーザーにマップすることができなくなります。外部サービス。)

  • ユーザーは後で別の認証プロバイダーを使用してログインします (これはあなたのケースです) -> 解決策: メールを使用してユーザーを既存のアカウントにマップしてみてください。失敗した場合は、ボタン/リンクを含むサインアップ フォームを表示します。アカウント、ログインしてください」(または同様の ;-)。それをクリックすると、電子メールとパスワードを入力する必要があります。次に、認証に成功したら、そのプロバイダーを既存のユーザー レコードに追加するだけで、次回サインアップに使用したプロバイダーと同じように、すぐにログインできます...

もしかしたら、他にも起こり得るケースがあるかもしれません。フィードバックはありますか?

于 2011-01-22T19:22:22.990 に答える
2

Stack Overflow は、ユーザーの認証設定を Cookie に保存し、サインイン ページに戻ったときに自動的にログインすることで、この問題をある程度克服しようとしているように見えます。

この問題を完全に解決することはまだできませんが、放射性降下物を最小限に抑えるのに役立つ可能性があります。

于 2011-01-10T07:20:53.127 に答える