from allauth.socialaccount.providers.base import Provider
class MySocialApp(Provider):
id = 'my_social_app'
name = 'My Social App'
package = 'my_social_app'
account = 'allauth.socialaccount.models.SocialAccount'
from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider
from allauth.socialaccount.providers.google.views import GoogleOAuth2Adapter
class MyOAuth2Provider(OAuth2Provider):
id = 'my_oauth2_provider'
name = 'My OAuth2 Provider'
adapter_class = GoogleOAuth2Adapter
from allauth.socialaccount.models import SocialAccount
class MySocialAccount(SocialAccount):
custom_field = models.CharField(max_length=255, blank=True)
from allauth.socialaccount.forms import LoginForm
class MyCustomLoginForm(LoginForm):
email = forms.EmailField(max_length=255, required=True)
from allauth.socialaccount.forms import SignupForm
class MyCustomSignupForm(SignupForm):
first_name = forms.CharField(max_length=255, required=True)
last_name = forms.CharField(max_length=255, required=True)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
del self.fields['username']
from allauth.socialaccount.providers.google.views import GoogleOAuth2Adapter
class GoogleOAuth2AdapterCustom(GoogleOAuth2Adapter):
def complete_login(self, request, app, token, **kwargs):
# Redirect to a custom URL after social login
redirect_url = '/custom/redirect/'
return HttpResponseRedirect(redirect_url)
from django.conf import settings
from allauth.account.signals import user_signed_up
def user_signed_up_handler(sender, request, user, **kwargs):
if settings.AUTO_SIGNUP_ENABLED:
user.is_active = True
user.save()
from allauth.account.forms import SignupForm
class MyCustomSignupForm(SignupForm):
def clean_email(self):
email = self.cleaned_data.get('email')
if not email.endswith('@example.com'):
raise forms.ValidationError('Email must end with @example.com')
return email
from django.conf import settings
# Override default templates
settings.TEMPLATES[0]['OPTIONS']['context_processors'].append('allauth.account.context_processors.account')
settings.TEMPLATES[0]['OPTIONS']['context_processors'].append('allauth.socialaccount.context_processors.socialaccount')
from django.core.mail import EmailMessage
def send_email_verification(request, user):
email = EmailMessage()
email.to = [user.email]
email.subject = 'Please verify your email'
email.body = 'Click the link below to verify your email:\n\n{}/accounts/confirm-email/{}/'.format(request.META['HTTP_HOST'], user.confirmation_key)
email.send()
from django.contrib.auth import views as auth_views
def password_reset_view(request, *args, **kwargs):
return auth_views.PasswordResetView.as_view(template_name='allauth/account/password_reset_form.html')(request, *args, **kwargs)
from django.contrib.auth import views as auth_views
def password_change_view(request, *args, **kwargs):
return auth_views.PasswordChangeView.as_view(template_name='allauth/account/password_change_form.html')(request, *args, **kwargs)
from django.contrib.auth import views as auth_views
def login_view(request, *args, **kwargs):
return auth_views.LoginView.as_view(template_name='allauth/account/login.html')(request, *args, **kwargs)
from django.contrib.auth import views as auth_views
def logout_view(request, *args, **kwargs):
return auth_views.LogoutView.as_view()(request, *args, **kwargs)
from django.contrib.auth import views as auth_views
def signup_view(request, *args, **kwargs):
return auth_views.SignupView.as_view(template_name='allauth/account/signup.html')(request, *args, **kwargs)
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password, **extra_fields):
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save()
return user
def create_superuser(self, email, password, **extra_fields):
user = self.create_user(email, password, **extra_fields)
user.is_staff = True
user.is_superuser = True
user.save()
return user
class CustomUser(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
objects = CustomUserManager()
from django.contrib.auth.backends import ModelBackend
class CustomAuthenticationBackend(ModelBackend):
def authenticate(self, request, email, password):
try:
user = CustomUser.objects.get(email=email)
if user.check_password(password):
return user
except CustomUser.DoesNotExist:
pass
from django.contrib.auth.models import Permission
class CustomPermission(Permission):
name = 'Can do something'
codename = 'can_do_something'
from django.contrib.auth.models import Group
class CustomGroup(Group):
name = 'Custom Group'
from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider
class CustomOAuth2Provider(OAuth2Provider):
def get_access_token_url(self):
return 'https://example.com/oauth2/access_token'
def get_default_scope(self):
return ['read', 'write', 'other']
from allauth.socialaccount.providers.oauth2.views import OAuth2RedirectView, OAuth2CallbackView
class MyCustomOAuth2RedirectView(OAuth2RedirectView):
success_url = '/custom/success/'
class MyCustomOAuth2CallbackView(OAuth2CallbackView):
success_url = '/custom/success/'
from allauth.socialaccount.signals import email_verified
def social_account_added_handler(sender, request, sociallogin, **kwargs):
extra_data = sociallogin.account.extra_data
# Get additional fields from social provider
username = extra_data['username']
profile_picture = extra_data['profile_picture']
# Add additional fields to user model
user = sociallogin.user
user.username = username
user.profile_picture = profile_picture
user.save()
from allauth.socialaccount.providers.oauth2.views import OAuth2RedirectView
class MyCustomOAuth2RedirectView(OAuth2RedirectView):
template_name = 'custom_template.html'
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
class MyCustomSocialAccountAdapter(DefaultSocialAccountAdapter):
def pre_social_login(self, request, sociallogin):
# Custom logic before social login
pass
def post_social_login(self, request, sociallogin):
# Custom logic after social login
pass
from django.utils.deprecation import MiddlewareMixin
class SocialLoginMiddleware(MiddlewareMixin):
def process_request(self, request):
if request.path.startswith('/social/'):
# Custom logic before social login
pass
def process_response(self, request, response):
if request.path.startswith('/social/'):
# Custom logic after social login
pass
from django.dispatch import receiver
from allauth.socialaccount.signals import user_details_updated
@receiver(user_details_updated)
def user_details_updated_handler(sender, request, user, **kwargs):
# Custom logic when user details are updated
pass
from allauth.socialaccount.providers.oauth2.views import OAuth2Adapter
from allauth.socialaccount.providers.oauth2.client import OAuth2Client
class MyOAuth2Adapter(OAuth2Adapter):
provider_id = 'my_provider'
access_token_url = 'https://example.com/oauth2/access_token'
authorize_url = 'https://example.com/oauth2/authorize'
client = OAuth2Client()
def complete_login(self, request, app, token, **kwargs):
# Custom logic to complete login
pass