0

我刚刚使用 django 1.5 将 Django-Social-Auth (DSA) v0.7.23 与自定义用户模型集成,并且身份验证/登录工作正常,除了用户名字段未存储在我的自定义用户模型中。

单步执行 DSA 代码似乎明确删除了 facebook 传回的用户名。这是弹出用户名的相关函数:

@classmethod
def username_field(cls, values):
    user_model = cls.user_model()
    if hasattr(user_model, 'USERNAME_FIELD'):
        # Django 1.5 custom user model, 'username' is just for internal
        # use, doesn't imply that the model should have an username field
        values[user_model.USERNAME_FIELD] = values.pop('username') # Username removed
    return values

如何获取从 facebook 传回的用户名,而不是让 DSA 明确删除它?

我相信解决方法是创建一个生成用户名的自定义管道。但是我想知道是否有其他人之前遇到过这种情况并利用了 DSA 中已经存在的任何东西(即特定的 settings.py 配置)

谢谢。

4

1 回答 1

2

原始用户名在details传递给管道函数的属性中可用,例如:

def generated_username(user, details, *args, **kwargs):
    username = details['username']
    user.your_field = username
    user.save()

值得注意的是,如果您USERNAME_FIELD在自定义模型中定义了用户名,则会从值中弹出用户名。

于 2013-05-19T17:48:00.240 回答