2014-02-21 41 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