2016-04-11 103 views
1

我有關於用戶名和電子郵件2個問題如何設計的電子郵件和用戶名登錄

1.我判斷用戶名,如果是「@」用戶名一個電子郵件,並權威性它遵循:

email_user = User.objects.get(email__iexact=username) 
authenticate(username=email_user.username) 

這是你推薦的好方法嗎?或者你可能有更好的建議? 我知道一個AbstractBaseUser可以做到這一點,但我認爲使用User更合理。

2.我應該將用戶的電子郵件存儲在User.email字段內嗎?

試想一下,如果我簽了一個新的用戶:

username: '123' 
email: '[email protected]' 

時,我立即登記成功,然後我發現我的電子郵件是錯誤的, 現在另一個用戶的電子郵件是「456 @谷歌。 com'不能再次註冊。 我只想驗證一個可以與用戶關聯的電子郵件。 你有什麼建議?

+0

你想編寫自己的代碼呢?或者你只是想用電子郵件驗證功能登錄? – Withnail

+0

User'類繼承自AbstractBaseUser類。您可以創建自己的自定義用戶類,它將覆蓋「基本」django用戶模型。 –

+0

Django auth的用戶模型的用戶名字段的最大長度爲30,因此將其設置爲電子郵件字段將無法使用,如果您希望將電子郵件作爲用戶名,則需要製作自己的自定義用戶模型 – Sayse

回答

1

如果您想使用電子郵件作爲您獨特的登錄密鑰,那麼如果您使用AbstractBaseUser創建自定義用戶模型,它將爲您將來的網站開發節省很多麻煩。 如果你想我可以張貼樣本工作代碼

關於你的第二個問題 - 您可以使用加密簽名在Django(https://docs.djangoproject.com/ja/1.9/topics/signing/)生產的關鍵。進一步發送此密鑰作爲鏈接(例如www.example.com/verify/:some_crypto_key :)並將其作爲鏈接發送到用戶的電子郵件地址。該密鑰將包含用戶標識和時間戳。如果您通過該鏈接收到請求,則表示該電子郵件是合法的。你可能會發現一個可以做類似任務的包。

編輯: 實施(短途) - 當用戶在您的網站上註冊時,請立即讓他/她使用您發送給指定電子郵件的鏈接驗證帳戶。如果您在給定時間內(例如20分鐘)未收到該電子郵件的回覆,請刪除該用戶條目。這意味着您不能讓用戶訪問您的網站,直到他/她驗證該帳戶。

缺陷 - 考慮用戶提交了錯誤郵件的情況。很明顯,用戶將永遠無法驗證它,但對於那些20分鐘,如果同一電子郵件的實際用戶嘗試在您的網站上註冊,他將無法訪問。這是不太可能的。此用戶還會收到一封來自您網站的電子郵件,表示該用戶已在網站上註冊(因此您可以在此處提供另一個鏈接,如果這不是您,請點擊這裏)'

+0

如果我使用電子郵件作爲我獨特的登錄密鑰,想象一下,如果我使用[email protected]註冊成功,但電子郵件「[email protected]」是你的。現在你不能註冊自己的帳戶,我無法驗證錯誤的電子郵件。
我有點困惑,你可以通過任何方式給我一些代碼。 – Helpme123

+0

實現這一點有很長的路要走。但是,讓我先告訴你簡短的方法(這有一個小小的缺陷),如果這適合你,你可以繼續這樣做。 – RA123

+0

也許我可以這樣做:如果您使用'[email protected]'和'用戶名'註冊,現在您只能使用'用戶名'登錄,除非您驗證了您的電子郵件。如果其他人使用同一封電子郵件註冊並驗證成功,您將不會驗證電子郵件(實際上,如果電子郵件不是您的,您將無法收到任何驗證電子郵件),並且應該修改另一封電子郵件進行綁定。 :) – Helpme123

0

除非你有一個燃燒的願望,編寫自己的custom user model,它會讓你用電子郵件替換用戶名字段,我會推薦使用類似Django AllAuth。它包括電子郵件驗證(如您的問題所述),並且可以設置爲使用電子郵件作爲用戶名相當容易。這是一個擁有大量支持的完善圖書館,比滾動自己的圖書館更便於使用。

(這就是說 - 滾動自己是一個很有啓發的經驗,和RA123的觀點是,你應該接受的答案,如果你打算在這條道路。)

+0

非常感謝,我會有一個。 :) – Helpme123

相關問題