2013-10-31 72 views
2

我在啓用Shibboleth的服務器上運行Django站點,因此使用Remote User authentication backend。所有用戶都通過此服務進行身份驗證(如LDAP)。這對我有用。但是,我的網站已被鎖定,因此只有屬於員工組的用戶才能訪問視圖 - 因此這需要「超級用戶」才能進入數據庫或管理站點並將用戶更改爲員工。我想轉換這個工作流程,以便我可以在Django管理站點預先創建/預授權遠程用戶,所以當他們第一次嘗試登錄時,他們不必等待有人翻轉他們賬戶中的「員工」標誌。Django通過管理站點添加遠程用戶

問題是,Django管理網站希望您爲所有新用戶輸入一個密碼。然而,在我的數據庫中,遠程用戶有空白密碼字段 - 儘管看起來密碼字段的內容對遠程認證無關緊要,但我更希望超級管理員不必爲每個人設置「假」密碼。

如果我直接在MySQL數據庫中創建用戶,我可以創建遠程用戶就好了,因爲我可以將密碼字段留空。但是,我不希望將直接數據庫訪問權交給其他超級管理員。

我試過從this SO post的管理網站刪除密碼字段。但它仍然帶着一個驗證錯誤,我缺少一個字段(即密碼)。

我的admin.py:

from django.contrib.auth.admin import UserAdmin 
from django.contrib.auth.models import User 

admin.site.unregister(User) 

class MyUserAdmin(UserAdmin): 
    add_fieldsets = (
     (None, { 
      'classes': ('wide',), 
      'fields': ('username', 'email',)} 
     ), 
    ) 

admin.site.register(User, MyUserAdmin) 

問:什麼是預填充授權的遠程用戶在Django設置的最佳方式?我正在用MySQL運行1.5.1。如果我創建一個自定義的添加用戶視圖,那是最簡單的方法嗎?或者有沒有辦法利用現有的Django管理視圖?

謝謝!

+0

簡單的方法是使用django-social-authentication後端。這個對我有用。 – drabo2005

+0

謝謝drabo,我不知道那個插件!可悲的是,我沒有在受支持的站點列表上看到Shibboleth(或者甚至不知道它是否可能)......並且嘗試創建單獨的插件可能相當於在此時創建自己的表單? – user

回答

2

創建您自己的UserCreationForm。使用Django的實現作爲指導,但在save方法中省略密碼字段和set_password調用。

然後告訴您的MyUserAdmin使用您的自定義用戶創建表單。

class MyUserAdmin(UserAdmin): 
    add_form = MyUserCreationForm 
+0

謝謝!這很好用! – user