2014-02-21 65 views
1

我已經使用djangosaml2包成功實現了與SAML斷言的基線Django/pysaml2集成。用戶是根據成功的身份驗證動態創建的,這非常棒!現在我想給我的Django 1.6 "extended" user model注入一個自定義屬性的簡短列表。Django SAML自定義用戶屬性和保存信號

的djangosaml2文檔狀態(參見:https://pypi.python.org/pypi/djangosaml2#user-attributes)我應該使用所提供的Django的信號:

...對於這些情況djangosaml2提供了一個Django的信號,你可以 聽。爲了做到這一點,你可以將下面的代碼添加到您的 應用:

from djangosaml2.signals import pre_user_save 

def custom_update_user(sender=user, attributes=attributes, user_modified=user_modified) 
    ... 
    return True # I modified the user object 

這裏是我的問題:

  • 我在哪裏放置上面的信號代碼?
  • 如果我的擴展用戶模型看起來像這樣,如何告訴我的擴展用戶模型設置員工ID?

models.py

from django.db import models 
from django.contrib.auth.models import User 

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    employee_id = models.CharField(blank=True,max_length=150) 

回答

0

替代信號的方法是在this pull requestsettings.py使用代碼定義:

SAML_PROFILE_MODULE = 'app.UserProfile' 

SAML_ATTRIBUTE_MAPPING = { 
    'samlAttributeThatDefinesID': ('employee_id',), 
} 

值在SAML_ATTRIBUTE_MAPPING應該從字段名的元組app.UserProfileauth.User模型,您希望使用saml屬性作爲關鍵字來填充模型。

聲明:該公關仍然公開,這是否會通向上游回購的問題。

+0

偉大的解決方案@Bula!如果擴展的用戶配置文件已經存在,我想注意到你的解決方案工作的很好,但是如果SAML_CREATE_UNKNOWN_USER爲True,那麼即使djangosaml2包會創建用戶,它也不會創建配置文件。我通過在我的項目中使用類似於這篇文章的post_save信號來解決這個問題(http://stackoverflow.com/questions/1910359/creating-a-extended-user-profile)。 –

+0

感謝@DerekNutile,很高興這個解決方案對您有用。 – Bula