2012-08-05 33 views
0

Django身份驗證具有用戶名和名稱字段。但是,用戶名具有字段選項unique = True。這可防止用戶在註冊時給first_name與用戶名相同並引發IntegrityError。如何繞過這一點,並保持用戶名唯一?即。沒有兩個用戶應該有相同的用戶名。但用戶名可以與first_name相同。並且兩個用戶可以具有相同的first_name,last_name。如何讓django auth獲取用戶名和名字相同的值?

+0

用戶認證的內容是什麼?可能是例子將有助於理解你的問題。 – Rohan 2012-08-05 07:24:31

+0

用戶將使用用戶名和密碼進行身份驗證。註冊時,它應該爲用戶名和名字提供相同的值。 – Bharathwaaj 2012-08-05 07:32:18

+0

只要名稱在網站範圍內唯一,名就可以用於用戶名。破壞用戶身份驗證的唯一性沒有多大意義。 – 2012-08-05 07:46:35

回答

1

你無法做到這一點。如果您想在first_name和username字段中具有相同的值,並且其中一個值不唯一,另一個值也不能唯一。

據我瞭解你在這裏做什麼,你只是想顯示first_name而不是用戶名 - 以達到只使用{{ user.first_name }},而不是僅僅使用{{ user }}。如果您需要存儲一些關於用戶的附加信息,您還可以定義Profiles,您可以在其中實施自己的__str__方法。

+0

謝謝@zeroos指出配置文件。這解決了目的。 – Bharathwaaj 2012-08-05 11:09:40

1

您將不得不實施使用first_name作爲用戶名的自定義身份驗證後端。

在註冊期間,您可以複製usernamefirst_name或生成一個永遠不會使用的隨機用戶名,因爲您將始終使用first_name代替。

你必須要照顧的

  • 在創建/註冊用戶的時候創建。
  • 用戶名(在你的案件名字)應該是唯一的

在認證後端代碼會是這樣的(這只是一個示例代碼):

def authenticate(self, username=None, password=None): 
    try: 
     user = User.objects.get(first_name=username) 
     if user.check_password(password): 
      return user 
    except User.DoesNotExist: 
     return None 

參考Writing authentication backend

有很多關於如何使用email進行身份驗證的示例,您可以參考使用first_name進行身份驗證。

+0

謝謝Rohan抽空回答。我從@zeroos得到了解決方案,幫助我解決了這個問題。不過,您與自定義身份驗證後端的鏈接非常有用。我正在爲此回答這個問題。 – Bharathwaaj 2012-08-05 11:12:06

相關問題