2013-03-07 54 views
0

Users表來存儲有密碼和申請認證工作好與該用戶的詳細信息。架構更改,整合Facebook和谷歌登錄

但我們要FacebookGoogle登錄我們的系統集成,因此請告知相關的架構修改。

 
CREATE TABLE dbo.Users(
    UserId  int IDENTITY(1, 1) PRIMARY KEY, 
    UserTypeId int,   -- Admin = 1, End User = 2. (We have a master table for this, but eliminating here for simplicity) 
    UserName nvarchar(16) NOT NULL UNIQUE, 
    UserPassword nvarchar(16), 
    FirstName nvarchar(64), 
    LastName nvarchar(64), 
    DateOfBirth date, 
    Gender  char(1), 
    PhoneNumber nvarchar(16), 
    Email  nvarchar(128) UNIQUE, 
    IsActive bit, 
    UpdateTime datetime default CURRENT_TIMESTAMP) 

這裏是我的想法:
1)當從Facebook或谷歌認證的用戶,則應用程序將有權利(EMAILID)
2)應用程序應該驗證EMAILID存在於用戶表,如果存在,它將允許登錄。

Q1>那麼這將會需要在用戶表中現有行的任何更新?
Q2>如果用戶記錄不存在(基於EMAILID要求記錄),那麼我認爲我們應該在用戶表中添加新記錄?
Q3>如果添加:用戶名和密碼值是什麼?
Q4>用戶(添加的記錄)是否可以在沒有Facebook登錄的情況下進行正常登錄?

謝謝。

回答

2

爲了接受OpenID登錄的,你就必須接受和存儲用戶的OpenID的網址。這個網址就像電子郵件地址一樣標識用戶。

Q1:依賴:如果你想同時允許OpenID的登錄和同一個用戶正常登錄,您將有另一列添加到表中。如果您不允許混合登錄,則可以使用Email列來存儲OpenID URL。

Q2:是的,如果你看到一個新的OpenID的URL,處理它就像一個未知的電子郵件地址

Q3:你將不得不要求用戶選擇一個用戶名 - 我認爲你做同樣的您當前的用戶。如果你想允許同一用戶同時登錄,你將不得不要求用戶設置密碼 - 否則他們只能通過他們的OpenID提供者登錄。

Q4:只有當你沒有要求輸入用戶名和密碼(見Q3)

請注意,允許同一用戶通過OpenID登錄和使用傳統的用戶名/密碼引入了潛在的安全問題:用戶可能不是不知道,你要求他們設置一個密碼,並輸入他們的Facebook(或谷歌)密碼。或者他們可能只是不在乎並在任何地方使用相同的密碼。如果他們這樣做,並且您的數據庫沒有正確加密密碼,那麼您的數據庫將存儲Facebook名稱未加密的密碼...即使只有10%在您的網站上使用了相同的密碼 - 請想象一下, 。

+0

非常感謝您的視圖/想法/建議。它幫助了很多。我會根據你的建議考慮Db的變化。此外,您的安全風險建議是非常好的知道,也爲此感謝。我很抱歉,因爲我的名譽較低,因此我無法投票發起您的帖子,否則+1爲您的答案。 – Prabhat 2013-03-10 11:24:42

+0

是的。如果有人曾經提出建議,仍然在尋找更好的選擇。 – Prabhat 2013-03-11 12:19:13

+0

我不認爲有很多其他的選擇。 – Hazzit 2013-03-11 12:31:47