Google Login with Django Allauth
January 29th, 2024
I often find myself needing to implement Google OAuth in Django projects but keep forgetting the exact steps. So, I'm documenting the process here for future reference.
Step 1: Install django-allauth
First, install django-allauth using Docker Compose:
docker compose exec web pipenv install django-allauth
Step 2: Update Django Settings
Modify your settings.py
file to include allauth
and allauth.socialaccount
:
# settings.py
INSTALLED_APPS = [
...
"allauth.socialaccount",
"allauth.socialaccount.providers.google",
...
]
MIDDLEWARE = (
...
"allauth.account.middleware.AccountMiddleware",
)
SOCIALACCOUNT_LOGIN_ON_GET = True
SOCIALACCOUNT_EMAIL_REQUIRED = False
if DEBUG:
SOCIAL_AUTH_REDIRECT_IS_HTTPS = False
ACCOUNT_DEFAULT_HTTP_PROTOCOL = "http"
else:
SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https"
Step 3: Update URL Patterns
In urls.py
, include the allauth
URLs:
#urls.py
urlpatterns = [
...
path('accounts/', include('allauth.urls')),
...
]
Step 4: Database Migrations
Run migrations to apply the changes:
docker compose exec web python manage.py migrate
Step 5: Set up Google Cloud Credentials
Next, navigate to the Google Cloud Dashboard to create your credentials.
-
Create a new project.
-
Click on “Configure consent screen”.
Follow the steps, but avoid adding a logo to bypass Google verifications.
-
Under Scopes, add:
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile
Continue following the steps.
Creating Credentials
Navigate to Credentials > OAuth 2.0 Client IDs > CREATE CREDENTIALS > OAuth client ID. Enter the following:
-
Authorised JavaScript origins:
https://www.yourdomain.com
-
Authorised redirect URIs:
https://www.yourdomain.com
https://www.yourdomain.com/accounts/google/login/callback/
http://localhost:8000/accounts/google/login/callback/
Now, add your keys to settings.py
using environment variables:
#settings.py
SOCIALACCOUNT_PROVIDERS = {
"google": {
"APP": {
"client_id": "<your-client-id>",
"secret": "<your-client-secret>",
"key": "",
},
"SCOPE": [
"profile",
"email",
],
"AUTH_PARAMS": {
"access_type": "online",
},
}
}
Testing and Publishing
During testing, you'll see a message until you click
After testing, you can publish your app. Without a logo, the process is instantaneous, and you don’t need to submit it to Google for verification.
Adding the Login Button
Finally, add the Google login button anywhere in your templates:
{% load socialaccount %}
<a href="{% provider_login_url 'google' %}">Continue with Google</a>
And that's it! You've successfully integrated Google OAuth into your Django project.
Recent TILs
X (Twitter) Automation with Python
Automating social media accounts can be annoying, especially because of the shenanigans Big Social put us through to obtain our API keys. Here is an updated…
Dockerize your Gatsby Projects
JavaScript-based projects tend to rot quickly. Very often, when I come back to them a few months later, nothing works. Today simply running my Gatsby blog after…
Login Required Modal with Django
The goal is to show a modal when the user clicks on a link, rather than redirecting him right away to the auth page. It just seems less confusing. In a file…