2010-11-27 3 views
1

私は現在、自分のウェブアプリケーションを構築しており、ユーザーがTwitterやFacebookでログインできるようにOAuth機能を組み込みたいと考えていました。私はSinatraでそれを構築しており、OmniAuthの宝石を見てきました。これは仕事にちょうど良いと思われます。私が持っている問題は、Userモデルを再設計することです。OAuthを使用するときのユーザーモデルのデザイン

現在、私は通常のファーストネーム、姓、ユーザー名、電子メール、パスワードを持っていますが、IDとして使用できるユニークなユーザー名を使用しています。また、twitterのようにwww.myapp.com/そのユーザーの情報を見つけるためのユーザー名。私は最初のバージョンでは、ログインとしてtwitterを使用し、その後Facebookに、最後に通常のサインアップを使用することに決めました。私の問題は、人々がTwitterでやっているのと同じように、facebookで同じユーザー名を持つ可能性が高いということです。たとえば、Twitterでサインインして「newuser」IDを取得すると、Facebookからの同じユーザー名を持つ誰かが参加しようとすると問題になります。

OmniAuth gemは、ユーザー情報のハッシュを提供することで機能します。私はMongoを使うつもりです。だから、ユーザーモデルにtwitterとfacebookフィールドを入れてそこにハッシュを入れておくことができます。私はユニークなIDを作成する方法についてはちょっと困っています。両方のサービスが同じユーザー名を持つ人を持つことになるか、または通常のログインが実装されると、誰かがサインアップして、すでにTwitterやFacebookで使用されているユーザー名を取得し、アカウント。

他の人がこれにどのように接近してきたのか本当に興味があります。

+1

もう一度検索を行う必要があります。 http://blog.railsrumble.com/blog/2010/10/08/intridea-omniauthこれはユーザーと権限の分離に関する興味深い記事です。 –

答えて

1

私はそれを意味し、唯一の認証キー用のテーブルを使用しています:user_idは、:プロバイダ、:キー列、および区切らUserテーブル、:電子メール、:ニックネーム、...

をユーザーがログインした場合彼のTwitterアカウントでログインしてログアウトし、Google Accでログインします。たとえば、2つの異なるアカウントを持ち、既存のアカウントと関連付ける解決策はありません。ログインしたユーザーが現在使用しているユーザーアカウントを別の認証プロバイダにリンクすることをお勧めします(ユーザーは認証から分離する必要があり、最初のログイン後にユーザーアカウントにさらに認証キーをリンクできる必要があります)。彼は自分のプライマリユーザアカウントにログインし(たとえば、twitterを使用して)、自分のユーザアカウントを自分のGoogleアカウントにリンクし、認証ページでgoogleのアイコンをクリックします。

+0

ありがとうNucc。 2人の別々の口座を持つ1人のユーザーの問題は、私が心配していたことです。私は、 '別のアカウントを接続する'オプションが明確にマークされている限り、そのことは避けることができると思います。 –

関連する問題