我刚刚使用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配置)
感谢。
答案 0 :(得分:2)
原始用户名在传递给管道功能的details
属性中可用,例如:
def generated_username(user, details, *args, **kwargs):
username = details['username']
user.your_field = username
user.save()
值得注意的是,如果您在自定义模型中定义了USERNAME_FIELD
,则会从值中弹出用户名。