iT邦幫忙

0

[觀念]會員系統綁fb等其他第三方登入之作法(OAuth )

各位好:
目前常看到很多網站喜歡綁FB, yahoo,twitter 等第三方會員登入,
不過我在想以下作法是否有哪邊需要改進?

網站本站應該保留本身的會員資料表(member table),欄位有:name,email,sex,birthday,...
然後在其member table中多出幾格欄位,例如:facebook_user(紀錄FB回傳的特殊識別ID) , yahoo_user(紀錄yahoo回傳的特殊識別ID)

假設,目前A會員是經由FB登入 ,並回傳了10001 以及 a@xx.com
會員資料表(member table)就會自動寫入一筆

--name---email---sex----birthday---facebook_user---yahoo_user-----
null   a@xx.com  null   null       10001            null

等到下次A會員又重新使用FB登入,那麼就會去撈出是否曾存在的資料:

 email='a@xx.com' and facebook_user='10001'

假設有count=1 那麼表示是第二次登入了

可是現在有個問題,email在資料表中是唯一值,不可重複,
萬一A會員是改由yahoo登入 ,並回傳了34534566 (假設) 以及 a@xx.com
會員資料表(member table)又自動寫入一筆新資料

--name---email---sex----birthday---facebook_user---yahoo_user-----
null  a@xx.com  null   null       null            34534566

等於同一個A會員佔了2筆資料。

因此是否有一種帳號綁定的概念,
若是判斷到email是同樣的,
則先確認是否為同一人所有後,整合再一起,
變成:

--name---email---sex----birthday---facebook_user---yahoo_user-----
null  a521@xx.com  null   null       10001            34534566

以上還是同一位A會員在不同網站使用相同email,
萬一又不同email....

因此不知道各位對於這類型的儲存跟解析有甚麼方式呢?

外獅佬 iT邦大師 1 級 ‧ 2014-12-22 12:57:27 檢舉
如果email是primary key,怎麼有可能再insert一筆新的資料??
乍看他是用「社群ID+email」為 primary key
醉
gituest iT邦新手 5 級 ‧ 2014-12-30 22:05:31 檢舉
處理重複的email
不是把email重新比對
再抓出一樣的登記項目,去除掉
,然後變成一筆,
整理一下 再放回去就好
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
mis2000lab
iT邦好手 1 級 ‧ 2014-12-22 13:45:10
最佳解答

ASP.NET (VS 2013)有提供這樣的功能 (第三方會員登入)
例如 http://www.dotblogs.com.tw/mis2000lab/archive/2013/11/11/login_using_google_facebook_account.aspx
您要不要用他作一個範例,來觀察內建的DB是怎麼作的?
至少可以當成參考
他可以包含Google/ FB / 自訂帳號,這些都可在同一個DB裡面

您說的「保留本身的會員資料表(member table),欄位有:name,email,sex,birthday,...」
這些自訂的欄位,是指Profile功能嗎?

還是您本身已經有設計「會員資料表」,想跟系統新建的第三方會員登入的資料表
兩者"合併"在一起呢?

可能要請您把問題再描述一下 :-)

isthome iT邦新手 4 級 ‧ 2014-12-31 17:42:17 檢舉

mis2000lab您好:

還是您本身已經有設計「會員資料表」,想跟系統新建的第三方會員登入的資料表
兩者"合併"在一起呢?

原先是思考是否為在"既有"「會員資料表」的情況下去擴充新的第三方欄位,
但是不確定這樣的作法是否好嗎?

isthome iT邦新手 4 級 ‧ 2014-12-31 17:45:22 檢舉

他可以包含Google/ FB / 自訂帳號,這些都可在同一個DB裡面

請問所謂的在同一DB裡面,是指同一個資料表內嗎?
另外就是我沒有使用asp.net,所以無法重建這個過程。

但是我仔細看您的文章內容,
那個欄位似乎是單獨開給google紀錄的。
那張表只有3個欄位:userid, loginprovider, providerkey
http://files.dotblogs.com.tw/mis2000lab/1311/201311111940393.jpg

0
newkevin
iT邦高手 1 級 ‧ 2014-12-23 03:22:59

對題目的理解
使用第三方登入網站後有粉多使用心態
粉多使用者 1 不想留資料 2 想留資料 不想花時間 3....
是針對這1 2種人 但多次登入網站
要強制留下 相關資訊吧 並節省 相關資源

元宵節還沒到,但大家已經在「猜」原PO想問什麼了 :-)

有位前輩說過一句話:「你想越晚得到答案,就問的越模糊越好」 Orz

一尾 iT邦研究生 1 級 ‧ 2014-12-23 11:00:40 檢舉

mis2000lab提到:
你想越晚得到答案,就問的越模糊越好

但問的太模糊
可能不會有人理啊
XD

isthome iT邦新手 4 級 ‧ 2014-12-31 17:51:11 檢舉

1.在同一張[會員資料表]中,增加第三方所需的欄位
如果採用這種這方式,假設是增加google登入(例如mis2000lab所提供的資料圖有看到:userid, loginprovider,providerkey),則是把這3個欄位alter到[原始會員表]中;增加fb登入,則多alter FB相關的欄位(如:fb_id,email,key等等)
以上的作法,好處是可以直接帳號綁定在同一人身上,不用join表,
但是壞處是,萬一之後要增加/減少某個第三方登入欄位,就要刪減該會員資料表...

我要發表回答

立即登入回答