0
我如何改變「用戶名密碼登陸」到「電子郵件地址和密碼登錄」 Django的註冊我怎麼改變「用戶名密碼登陸」到「電子郵件地址和密碼登錄」 Django的註冊
我如何改變「用戶名密碼登陸」到「電子郵件地址和密碼登錄」 Django的註冊我怎麼改變「用戶名密碼登陸」到「電子郵件地址和密碼登錄」 Django的註冊
你無法輕鬆地在django.contrib.auth.model.User
的用戶名字段中存儲電子郵件,因此您需要一個不同的auth後端。將以下內容添加到AUTHENTICATION_BACKENDS
。見http://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend
from django.contrib.auth.models import User
class EmailBackend(object):
""" Authenticates against the email field of django.contrib.auth.models.User
"""
def authenticate(self, email=None, password=None):
# Try using the email if it is given
if email:
for user in User.objects.filter(email=email):
if user.check_password(password):
return user
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
然後,在你的意見,通過調用django.contrib.auth.authenticate
認證。
有兩點需要注意:
AUTHENTICATION_BACKEND
那裏,特別是如果你想使用Django管理。的保存方法設置的用戶名某處(例如,在您的新用戶表單):
import uuid, binascii
username = binascii.b2a_base64(uuid.uuid4().bytes)
+1「你不能輕鬆存儲電子郵件」。 User.username字段a)只有30個字符,對於某些電子郵件來說不夠長,並且b)它要求名稱與'\ w +'匹配,這不允許諸如'@'或'。'之類的內容。如果你只想專注於電子郵件地址,這確實會造成使用者名稱(因爲它是必需的)的問題。我建議使電子郵件變得流暢(例如[email protected] => foo_bar_com),修剪爲30個字符並存儲(但要準備處理意外的碰撞)。用戶永遠不會看到它,並且您的身份驗證後端將完全忽略它。 – 2010-01-24 18:20:53
在1.2中,您可以使用電子郵件登錄 – yanchenko 2010-03-31 04:00:36
更多內容:1.2現在允許電子郵件中的字符用於用戶名(請參閱http://code.djangoproject.com/changeset/12634)。正如提交信息所承認的那樣,它不是一個完整的解決方案,因爲最大長度仍然只有30個字符。 – 2010-04-01 05:35:52