6

我想弄清楚如何使用附加功能來增強身份驗證方法。重寫身份驗證方法 - Django管理

例如

  • 到期的口令
  • 特殊密碼格式
  • 長度要求
  • 等...

這是很簡單的對網站的前端,但對於管理面板?


我想,我應該覆蓋用戶的管理對象,如身份驗證可能駐留那裏。我認爲這是相當困難的。

在此先感謝! :)

回答

6

您可以按照http://docs.djangoproject.com/en/dev/topics/auth/#authentication-backends中的說明創建自定義身份驗證後端。從本質上講,創建具有一個authenticate方法的後端類:

class MyBackend: 
    def authenticate(self, username=None, password=None): 
     # Check the username/password and return a User. 

然後在settings.py類添加到AUTHENTICATION_BACKENDS

雖然這是用於身份驗證的,但是例如,如果密碼正確但過期,您可以簡單地通過將用戶重定向到更改密碼頁面來執行所有密碼驗證。考慮使用messaging framework爲用戶提供關於指導他進入通用更改密碼頁面時發生的情況的提示。

+0

嗨,你幾乎涵蓋了一切:O這是一個很好的答覆!非常感謝。 – RadiantHex 2010-11-17 11:18:23

+0

嗨,我正在執行auth後端,我對信號感到困惑。我無法在管理員中實施適當的驗證? – RadiantHex 2010-11-17 11:38:55

+0

@RadiantHex我對django信號部分表示歉意。它不適用於你的情況,因爲你不能從模型中讀取原始密碼(它已經被哈希),因此你不能進行驗證。喬丹關於將密碼頁劫持到自定義視圖的建議更好。你只需要劫持所有可以更改密碼的頁面。另一種方法是嘗試[set_password]方法的[猴子修補](http://stackoverflow.com/questions/192649/can-you-monkey-patch-methods-on-core-types-in-python)用戶模型。 – 2010-11-17 17:55:06

1

如果要驗證密碼是否內置到模型中,那麼您可能需要extend the django User model。通過創建自己的改變,並設置密碼,然後把相關的URL略高於(r'^admin/', include(admin.site.urls))意見

  • 覆蓋管理員密碼選項:

    否則,你可以做到以下幾點。正則表達式看起來像(r'^admin/auth/user/(\d+)/password/', new_change_password)

  • 在單獨的模型中跟蹤密碼使用期限,然後當它們到期時,一旦過期就重定向到更改密碼。
+0

嗨,感謝您的回覆! – RadiantHex 2010-11-17 11:39:51

+0

嗨我發現這個回覆實際上更有用,你有線索如何將視圖轉發到密碼更改視圖? – RadiantHex 2010-11-17 12:40:09

+0

你的意思是重定向嗎?您可以使用'HttpResponseRedirect'將用戶重定向到更改密碼頁面的url。我想如果你看一下django/contrib/auth的url文件,那麼你可以找到使用哪個url名稱。 – 2010-11-17 16:14:37