【问题标题】:Django SAML Custom User Attributes & Save SignalDjango SAML 自定义用户属性和保存信号
【发布时间】:2014-02-21 22:39:23
【问题描述】:

我已经使用djangosaml2 包成功实现了与 SAML 断言的基线 Django/pysaml2 集成。用户是基于成功的身份验证动态创建的,这很棒!现在我想在我的Django 1.6 "extended" user model 中注入一个简短的自定义属性列表。

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)

【问题讨论】:

    标签: django signals saml django-custom-user


    【解决方案1】:

    信号方法的替代方法是使用this pull requestsettings.py 中的代码定义:

    SAML_PROFILE_MODULE = 'app.UserProfile'
    
    SAML_ATTRIBUTE_MAPPING = {
        'samlAttributeThatDefinesID': ('employee_id',),
    }
    

    SAML_ATTRIBUTE_MAPPING 中的值应该是来自 app.UserProfileauth.User 模型的字段名称元组,您希望使用给定的 saml 属性作为键来填充它们。

    免责声明:这个 PR 仍然是开放的,它是否会进入上游 repo 是个问题。

    【讨论】:

    • 很好的解决方案@Bula!我确实想指出,如果扩展用户配置文件已经存在,您的解决方案运行良好,但即使 djangosaml2 包将在 SAML_CREATE_UNKNOWN_USER 为 True 时创建用户,它也不会创建配置文件。我通过在我的项目中使用类似于 article 的 post_save 信号解决了这个问题。
    • 感谢@DerekNutile,很高兴这个解决方案对您有用。
    猜你喜欢
    • 2011-08-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2016-09-12
    相关资源
    最近更新 更多