Django Social Auth在自定义用户模型中存储来自Facebook的用户名

时间:2013-05-17 15:55:19

标签: django django-models django-socialauth

我刚刚使用django 1.5和自定义用户模型集成了Django-Social-Auth(DSA)v0.7.23,并且auth / login工作正常,但用户名字段除外,该字段未存储在我的自定义用户模型中。

单步执行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配置)

感谢。

1 个答案:

答案 0 :(得分:2)

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

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

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