我正在使用Python socia auth for face-book。我修改了用户模型的默认Django行为并删除了username
字段。
我已在自定义用户模型中添加了此内容:USERNAME_FIELD = 'email'
BUt我在尝试登录时遇到此错误
TypeError at /complete/facebook/
'username' is an invalid keyword argument for this function
我知道在尝试创建用户时,它找不到用户名字段,这会引发此错误。
我已经定义了以下设置,但我的问题仍然存在:
SOCIAL_AUTH_USER_MODEL = 'accounts.User'
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = True
对此有何解决方案?
答案 0 :(得分:6)
我知道问题发布后的几个月,但我遇到了同样的问题并找到了解决方案。
使用管道可以解决这个问题。默认管道执行此操作:
def create_user(strategy, details, user=None, *args, **kwargs):
if user:
return {'is_new': False}
fields = dict((name, kwargs.get(name) or details.get(name))
for name in strategy.setting('USER_FIELDS',
USER_FIELDS))
if not fields:
return
return {
'is_new': True,
'user': strategy.create_user(**fields)
}
在设置中覆盖USER_FIELDS
,只留下email
。或者,您可以创建全新的create_user
方法。
答案 1 :(得分:0)
我有同样的问题,并通过在创建用户字段中添加用户参数解决了问题。 无:参数'用户名'社会认可需要。它实际上并未使用。
class UserManager(BaseUserManager):
def create_user(self, email,username=None, full_name=None, password='&btCqv"}@,4TWd6A'):
if not email:
raise ValueError("Users must have an email address")
if not password:
raise ValueError("Users must have a password")
user = self.model(
email=self.normalize_email(email),
)
user.set_password(password) # change user password
user.staff = is_staff
user.admin = is_admin
user.is_active = is_active
user.save(using=self._db)
return user
如果问题仍然存在,请参阅:https://github.com/python-social-auth/social-app-django/issues/15#issuecomment-276118574