User0511
User0511

Reputation: 725

Django Social Auth

i want to make login social auth and i use userprofile to login, but i getting error. This is error:

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

this is my admin.py code

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

this is 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 

i already put password in fields class Meta(UserCreationForm.Meta) but its still same error.

can you help me solve this problem?

Upvotes: 1

Views: 284

Answers (1)

Sid Shukla
Sid Shukla

Reputation: 1030

As the error mentions, create_user() expects at least three arguments but you provide only two (username and email) while defining fields. Django documentation covers this pretty well. Try adding a password field and see if it works.

Upvotes: 3

Related Questions