2011-09-04 10 views
12

FacebookやTwitterアカウントを使用してユーザーが自分のWebサイトにログインできるようにしたいが、アカウントがない場合は新しいアカウントを登録し、私のサイトの基本的なログイン。OAuth(Facebook、Twitter)と基本的なログインユーザーテーブル

しかし、私のユーザーテーブルがどのように見えるべきか:

私の考え:

  • ID(プライマリー、自動インクリメント)
  • ユーザ名(のOAuthログインの場合=> ouath_provider + oauth_id 、例:fb_100001557958700)
  • パスワード(パスワードはユーザーによって選択されるか、またはoauthの場合はランダムに生成されます)
  • 名前ay)

あなたはどう思いますか? 基本ログイン用に1つ、oauthログイン用に2つのテーブルが必要ですか?しかし、ユーザーがユニークなIDを持つ方法は?

コメントありがとうございます。

答えて

17

私の経験では、権限を1つのテーブルに格納し、ユーザデータを別のテーブルに格納することをお勧めします。

権限:

network  - Varchar(255) #Twitter/Facebook/Openid/whatever 
network_id - varchar(255) #Users id for that social network. 
user_id  - int 

ユーザー:この構造により

id (primary, auto increment) 
name 
password 
username 

、同じユーザーが将来のある時点でTwitterやFacebookの両方を使ってログインできるようにする場合、つまり、また可能です。

+1

OAuthの場合ユーザーのユーザー名とパスワードは何ですか?それはヌルですか、何か生成されたものか、またはユーザーは毎回ユーザー名とパスワードを選択する必要がありますか? –

+2

理想的には、ユーザにユーザ名(oauthプロバイダからの自動入力が可能)とパスワードを登録させることができます。これは、ユーザーがTwitterやFacebookアカウントからロックアウトされた場合のフォールバックを提供します。 – Gazler

+0

私は@Gazlerをお待ちしていますが、 'user_id'フィールドはどうですか?この文脈では何を表していますか?つまり、usersテーブルの外部キーですか? – Atieh

2

これは私のユーザーテーブルの外観です。

  • USER_ID(プライマリー、自動インクリメント)
  • oauth_provider(列挙(なし、TwitterやFacebook))
  • は、など

すべてのユーザ名

  • パスワード
  • をoauth_uidユーザーがFacebook/Twitterを介して登録しているときに、新しいエントリがパスワード記録と共に挿入されるofcourseのヌルとして。

    あなたはアプリ/データベース全体で使用できる1つの一意のuser_idを持っているので、これは良い方法だと思います。

  • +0

    ありがとうdandoen。 Facebook/Twitter登録の場合のusersnameは何ですか?それはヌルですか? –

    +0

    いいえ、ユーザーがfacebook/twitterに登録すると、すでにユーザー名が表示されている可能性があります。 facebookの場合は 'username'フィールド、Twitterの場合は' screen_name'フィールドです。 – dandoen

    +0

    @dandoenしかし、ここでの問題は、「ネイティブ」アカウントだけがパスワードを持っていることです。これはdbの空のパスワードフィールドにつながり、ユーザ名&& password == ""(これは非常に強力なコードアーキテクチャが必要です)の潜在的なハックにつながります – Sliq