2014-02-21 2 views
1

Я успешно реализовал интеграцию Django/pysaml2 с базой данных с утверждением SAML с использованием пакета djangosaml2. Пользователи создаются динамически на основе успешной аутентификации, что отлично! Теперь я хотел бы ввести короткий список пользовательских атрибутов в мой Django 1.6 "extended" user model.Пользовательские атрибуты пользователя и сохранение Django SAML

В djangosaml2 документации говорится (см: https://pypi.python.org/pypi/djangosaml2#user-attributes), что я должен использовать предоставленный сигнал Джанго:

... для этих случаев djangosaml2 обеспечивает сигнал Джанго, который вы можете слушать. Для того, чтобы сделать это вы можете добавить следующий код в приложение:

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 

Вот мои вопросы:

  • Где нужно поместить код выше сигнала?
  • Как сообщить моей расширенной пользовательской модели, чтобы установить идентификатор сотрудника, если моя расширенная модель пользователя выглядит так?

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 request и settings.py определяет:

SAML_PROFILE_MODULE = 'app.UserProfile' 

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

Значение в SAML_ATTRIBUTE_MAPPING должно быть кортежами имен полей из app.UserProfile или auth.User, которые вы хотите заполнить атрибутом saml, заданным как ключ.

Отказ от ответственности: этот PR все еще открыт, и это вопрос, будет ли он пробиваться к восходящему репо.

+0

Отличное решение @Bula! Я хочу отметить, что ваше решение работает хорошо, если расширенный профиль пользователя уже существует, но он не будет создавать профиль, даже если пакет djangosaml2 создаст пользователя, если SAML_CREATE_UNKNOWN_USER имеет значение True. Я работал над этим, используя сигнал post_save в моем проекте, подобный этому [article] (http://stackoverflow.com/questions/1910359/creating-a-extended-user-profile). –

+0

Спасибо @DerekNutile, рад, что это решение вам было полезно. – Bula

Смежные вопросы