簡體   English   中英

檢查用戶是否激活了他/她的帳戶的最有效方法?

[英]Most efficient way of checking if a user as activated his/her account?

我希望我的用戶在他們能夠登錄之前激活他們的帳戶。 他們在注冊后發送一封包含激活鏈接的電子郵件,如下所示:

http://www.blabla.com/activate.php?email=blabla@blabla.com&token=Aisd23uNMAu53932asdDasd82AS

當然,每當有人登錄時,我都必須檢查用戶是否激活了他/她的帳戶。 我可以想到兩種方法來解決這個問題,要么在我的'users'表中有一個額外的列,只要用戶激活就會設置為空:

-----------------------------------------------
| id | username | password | activation_token |
-----------------------------------------------
| 1  | user1    | blabla   |                  |
-----------------------------------------------
| 2  | user1    | blabla   | asd232DA34qADJs2 |
-----------------------------------------------

然后,每當用戶登錄時,我都會提取activation_token和用戶信息。或者我可以有一個僅包含激活令牌的單獨表,然后每次用戶登錄時都會在'users'表中加入:

--------------------------------------
| id | account_id | activation_token |
--------------------------------------
| 1  | 37         | dsad2428491dka98 |
--------------------------------------
| 2  | 2          | asd232DA34qADJs2 |
--------------------------------------

那么哪一個最有效? 謝謝你的時間。

編輯:感謝所有的好評

就個人而言,我會把兩者結合起來......

-------------------------------------
| id | username | password | status |
-------------------------------------
| 1  | user1    | blabla   | 1      |
-------------------------------------
| 2  | user1    | blabla   | 0      |
-------------------------------------

其中狀態為TINYINT(1)字段,對於已停用的用戶為0,對於已激活的用戶為1。 這樣,你可以很快地告訴用戶的“狀態”......

然后,將令牌存儲在另一個表中(就像您已經擁有的那樣)......這樣,您不需要加入,或者在不激活帳戶時檢查字符串列...

使用第一個選項 - 將一個isactivated列添加到USERS表。

不需要單獨的表 - 這是一對一的關系。

將令牌存儲在Users表而不是單獨的表中意味着您不必在每次查詢期間加入它們,這會稍快一些。

此外,您不會存儲userIds並為該令牌表創建新的Id,這將保存在數據存儲上。

我有一個整數字段,Activated,默認為0.當有人嘗試身份驗證時,您只會查找已激活的帳戶。 我將auth令牌存儲在您所描述的單獨表中。

如果關系是1-1(例如,激活表每個帳戶ID將有1行),那么執行完全規范化的2表方法是一種過度殺傷力。

你不會遇到任何一種方法的主要問題,但1-table one更容易。

如果使用2-table方法,則應在用戶表中存儲“激活”是/否標志,因此您無需加入第二個表以進行用戶登錄。

如果激活令牌僅用於驗證“點擊此處激活您的帳戶”鏈接並且永遠不會再次使用,那么在您的用戶表中浪費存儲char(32) (或其他任何內容)字段的空間毫無意義一次性使用。 將激活令牌放在一個單獨的表中,當用戶點擊激活時,您的帳戶激活腳本可以參考該表。 激活完成后,您可以從該單獨的表中刪除令牌的記錄。

在登錄過程中登錄腳本可以檢查的用戶表中放置一個'is_activated'布爾/位字段(如果字段為null / false,則輸出“嘿,你還沒有激活”錯誤)。

當然,這些天磁盤空間很便宜。 即使是每個擁有32char激活令牌的百萬用戶也只會“浪費”32meg的空間。 如果磁盤驅動器的價格低於100美元,則為磁盤的0.00305%,基本上為0.00美元(0.305美分)。

我認為不需要在DB中存儲激活令牌。 像md5('users @ email'。'secret')之類的東西可以正常工作。 至於用戶狀態,我同意其他人的意見,在users表中使用單獨的專用“status”列。 另一個優點是此列也可以存儲其他stati(例如“禁止”;)

在我看來,不是激活代碼存儲在users表中,默認情況下保持一個標志設置。 當用戶單擊任何激活鏈接時,然后更新表並設置標志。

登錄前檢查標志是否打開。 如果標志已關閉,則用戶未單擊激活鏈接。 然后你可以給用戶一個錯誤信息。

如果flag為on,則用戶可以成功登錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM