2011-09-04 41 views
12

我想讓用戶使用他們的Facebook或Twitter帳戶登錄我的網站,但是如果他們沒有登錄,那麼要註冊一個新帳戶,並使用我的網站的基本登錄。OAuth(Facebook,Twitter)和基本登錄 - 用戶表

但是應該如何我用戶表如下所示:

我的想法:

  • ID(小學,自動遞增)
  • 的用戶名(在的OAuth登錄的情況下=> ouath_provider + oauth_id ,例如:fb_100001557958700)
  • 密碼(密碼由用戶選擇或在oauth的情況下隨機生成)
  • name(dispil的名稱ay)

您怎麼看? 或者我應該有2個表,1個用於基本登錄,另外1個用於oauth登錄?但那麼用戶如何擁有獨特的ID?

在此先感謝您的意見。

回答

17

根據我的經驗,您最好將您的授權存儲在一個表中,並將您的用戶數據存儲在另一個表中。

授權:

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'字段呢?它在這種情況下代表什麼?我的意思是,它是用戶表的外鍵嗎? – Atieh

2

這就是我的用戶表的樣子。

  • USER_ID(小學,自動遞增)
  • oauth_provider(枚舉(無,推特,臉譜))
  • oauth_uid
  • 用戶名
  • 密碼

每用戶通過Facebook/Twitter註冊的時間,新的條目插入密碼記錄作爲空的課程。

我認爲這是一個很好的方法,因爲你有1個獨特的user_id,你可以在整個應用/數據庫中使用它。

+0

謝謝dandoen。在Facebook/Twitter註冊的情況下,用戶名是什麼?它是否爲空? –

+0

不,當用戶註冊facebook/twitter時,他們可能已經有一個用戶名了。對於「username」字段的Facebook以及「screen_name」字段的Twitter。 – dandoen

+0

@dandoen但這裏的問題是,只有「本機」帳戶有一個密碼,通過twitter等創建acc沒有。這導致數據庫中的空密碼字段,這導致潛在的黑客攻擊,因爲用戶名&&密碼==「」(這需要非常強大的代碼體系結構) – Sliq