2015-05-26 3 views
1

Я хочу сделать логин социальной аутентификации, и я использую userprofile для входа в систему, но я получаю ошибку. Это ошибка:Django Social Auth

Exception Type: TypeError at /complete/facebook/ 
Exception Value: create_user() takes at least 3 arguments (2 given) 

это мой admin.py код

class CustomUserCreationForm(UserCreationForm): 
password1 = forms.CharField(label='Password', widget=forms.PasswordInput) 
password2 = forms.CharField(label='Password Confirmation', widget=forms.PasswordInput) 

class Meta(UserCreationForm.Meta): 
    model = UserProfile 
    fields = ('username', 'email','password') 

def clean_username(self): 
    username = self.cleaned_data["username"] 

    try: 
     UserProfile._default_manager.get(username=username) 
    except UserProfile.DoesNotExist: 
     return username 
    raise forms.ValidationError(self.error_messages['duplicate_username']) 

def clean_password2(self): 
    password1 = self.cleaned_data.get("password1") 
    password2 = self.cleaned_data.get("password2") 

    if password1 and password2 and password1 != password2: 
     raise forms.ValidationError("Passwords do not match.") 
    return password2 

def save(self, commit=True): 
    user = super(UserCreationForm, self).save(commit=False) 
    user.set_password(self.cleaned_data["password1"]) 
    if commit: 
     user.save() 
    return user 

это model.py

class MyUserManager(BaseUserManager): 
def create_user(self, username, email, password=None): 
    if not email: 
     raise ValueError('Users must have an email address') 
    if not username: 
     raise ValueError('Users must have a username') 

    user = self.model(
     username = username, 
     email = self.normalize_email(email), 
    ) 
    user.is_active = True 
    user.set_password(password) 
    user.save(using=self._db) 
    return user 

# def create_user(self, username, email): 
# return self.model._default_manager._create_user(username=username) 

def create_superuser(self, username, email, password): 
    user = self.create_user(username=username, email=email, password=password) 
    user.is_staff = True 
    user.is_superuser = True 
    user.save(using=self._db) 
    return user 

я уже поставил пароль в поля класса Meta (UserCreationForm.Meta) но его еще одна ошибка.

Вы можете помочь мне решить эту проблему?

+0

, не могли бы вы дать fulltraceback ошибки? – Nilesh

+0

вы можете увидеть полный ответ в этой ссылке http://pastebin.com/XQEZSn0E. не могли бы вы мне помочь, пожалуйста? – User0511

ответ

3

В качестве ошибки упоминается, что create_user() ожидает не менее трех аргументов, но при определении полей вы предоставляете только два (имя пользователя и адрес электронной почты). Django documentation охватывает это довольно хорошо. Попробуйте добавить поле пароля и посмотреть, работает ли оно.

+0

где я добавляю модель поля пароля или в класс Meta (UserCreationForm.Meta)? – User0511

+0

'fields = ('username', 'email', 'password')' –

+0

не работает. Зачем? – User0511

Смежные вопросы