{"id":61181,"date":"2024-04-08T10:25:29","date_gmt":"2024-04-08T04:55:29","guid":{"rendered":"https:\/\/www.tothenew.com\/blog\/?p=61181"},"modified":"2024-04-12T10:34:19","modified_gmt":"2024-04-12T05:04:19","slug":"how-to-integrate-django-with-social-auth-login-facebook-and-github","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/how-to-integrate-django-with-social-auth-login-facebook-and-github\/","title":{"rendered":"How to Integrate Django with Social Auth Login \u2013 Facebook and GitHub"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Social authentication is a powerful feature that allows users to log in to your Django web application using their social media accounts like Facebook, Google, Twitter, and more. It simplifies users&#8217; registration and login process while providing additional user data for your application.<\/span><\/p>\n<h2><b>Basic Setup:<\/b><\/h2>\n<h3><b>Step 1: Installation \u2013<\/b><\/h3>\n<p><strong><em>First, install the django-social-auth library using pip:<\/em><\/strong><\/p>\n<pre><span style=\"font-weight: 400;\">pip install social-auth-app-django\r\n<\/span><\/pre>\n<h3><b>Step 2: Settings Configuration \u2013<\/b><\/h3>\n<p><strong><em>Add &#8216;social_django&#8217; to your INSTALLED_APPS in your project\u2019s settings (settings.py):<\/em><\/strong><\/p>\n<pre><span style=\"font-weight: 400;\"># settings.py<\/span>\r\n<span style=\"font-weight: 400;\">INSTALLED_APPS = [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0# ...<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'social_django',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0# ...<\/span>\r\n<span style=\"font-weight: 400;\">]<\/span><\/pre>\n<h3><b>Step 3: Migrations<\/b><\/h3>\n<pre><span style=\"font-weight: 400;\">python manage.py makemigrations<\/span><\/pre>\n<pre><span style=\"font-weight: 400;\">python manage.py migrate\r\n\r\n<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">The library will automatically handle auth tokens and all the required information to deal with OAuth and OAuth2. Generally speaking, you won\u2019t need to handle it manually or access the user\u2019s social profile.<\/span><\/p>\n<h3><b>Step 4: Configuration of Django Social Auth App \u2013<\/b><\/h3>\n<p><strong><em>Update the MIDDLEWARE_CLASSES by adding the SocialAuthExceptionMiddleware to the end of it:<\/em><\/strong><\/p>\n<pre><span style=\"font-weight: 400;\">MIDDLEWARE_CLASSES = [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'django.middleware.security.SecurityMiddleware',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'django.contrib.sessions.middleware.SessionMiddleware',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'django.middleware.common.CommonMiddleware',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'django.middleware.csrf.CsrfViewMiddleware',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'django.contrib.auth.middleware.AuthenticationMiddleware',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'django.contrib.auth.middleware.SessionAuthenticationMiddleware',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'django.contrib.messages.middleware.MessageMiddleware',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'django.middleware.clickjacking.XFrameOptionsMiddleware',<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span><b>'social_django.middleware.SocialAuthExceptionMiddleware',<\/b><span style=\"font-weight: 400;\">  # &lt;-- Here<\/span>\r\n<span style=\"font-weight: 400;\">]<\/span><\/pre>\n<p><strong><em>Now we update the context_processors inside TEMPLATE:<\/em><\/strong><\/p>\n<pre><span style=\"font-weight: 400;\">TEMPLATES = [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0{<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'BACKEND': 'django.template.backends.django.DjangoTemplates',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'DIRS': [BASE_DIR + '\/templates\/',],<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'APP_DIRS': True,<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'OPTIONS': {<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'context_processors': [<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'django.template.context_processors.debug',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'django.template.context_processors.request',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'django.contrib.auth.context_processors.auth',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'django.contrib.messages.context_processors.messages',<\/span>\r\n\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><b>'social_django.context_processors.backends',<\/b><span style=\"font-weight: 400;\">  # &lt;-- Here<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><b>'social_django.context_processors.login_redirect',<\/b><span style=\"font-weight: 400;\"> # &lt;-- Here<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0},<\/span>\r\n<span style=\"font-weight: 400;\">]<\/span><\/pre>\n<p><em><strong>Add the AUTHENTICATION_BACKENDS in your settings.py file:<\/strong><\/em><\/p>\n<pre><span style=\"font-weight: 400;\">AUTHENTICATION_BACKENDS = (<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'social_core.backends.facebook.FacebookOAuth2',<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'social_core.backends.twitter.TwitterOAuth',<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'social_core.backends.github.GithubOAuth2',<\/span>\r\n\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0'django.contrib.auth.backends.ModelBackend',<\/span>\r\n<span style=\"font-weight: 400;\">)<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">So, here, we must specify the correct backends, depending on your needs. Since we will be working with Facebook, Twitter, and GitHub in this example<\/span><span style=\"font-weight: 400;\">, I have just added those three backends you see above in <\/span><span style=\"font-weight: 400;\">AUTHENTICATION_BACKENDS<\/span><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h3><b>Step 5:<\/b><\/h3>\n<p><strong><em>Update the urls.py add the social-auth-app-django URLs:<\/em><\/strong><\/p>\n<pre><span style=\"font-weight: 400;\">from django.contrib import admin<\/span>\r\n<span style=\"font-weight: 400;\">from django.urls import path, include<\/span>\r\n\r\n<span style=\"font-weight: 400;\">urlpatterns = [<\/span>\r\n<span style=\"font-weight: 400;\">path(\"admin\/\", admin.site.urls),<\/span>\r\n<span style=\"font-weight: 400;\">path(\"\",include(\"app.urls\")),<\/span>\r\n\r\n<b>path(\"oauth\/\",include(\"social_django.urls\",namespace=\"social\")),# &lt;-- here<\/b>\r\n<span style=\"font-weight: 400;\">]<\/span><\/pre>\n<h2><b><i>Facebook Login Integration in Django Website<\/i><\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Go to <\/span><a href=\"https:\/\/developers.facebook.com\/\"><span style=\"font-weight: 400;\">developers.facebook.com\/<\/span><\/a><span style=\"font-weight: 400;\"> click on <\/span><b>My Apps<\/b><span style=\"font-weight: 400;\"> and then <\/span><b>Create App<\/b><span style=\"font-weight: 400;\"> (If new, click on Get Started and create your developer account). Fill in the app name and contact email, and click on <\/span><b>Create App ID<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61171 size-large\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp1-1024x348.png\" alt=\"\" width=\"625\" height=\"212\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp1-1024x348.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp1-300x102.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp1-768x261.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp1-1536x522.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp1-624x212.png 624w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp1.png 1912w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">From the sidebar, go to <\/span><b>Settings -&gt; Basic<\/b><span style=\"font-weight: 400;\">, grab the <\/span><b>App ID<\/b><span style=\"font-weight: 400;\"> and <\/span><b>App Secret<\/b><span style=\"font-weight: 400;\"> (click on the <\/span><b>Show<\/b><span style=\"font-weight: 400;\"> button to get it as plain text):<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">SOCIAL_AUTH_FACEBOOK_KEY = 'APP_ID'\u00a0\u00a0<\/span><\/pre>\n<pre><span style=\"font-weight: 400;\">SOCIAL_AUTH_FACEBOOK_SECRET = 'APP_SECRET'\r\n<\/span><\/pre>\n<p><em><strong>Change the above App ID and App Secret and add it to settings.py file<\/strong><\/em><\/p>\n<p><span style=\"font-weight: 400;\">Now go to <\/span><b>Settings -&gt; Basic<\/b><span style=\"font-weight: 400;\"> at the bottom. First, click on the button <\/span><b>+ Add Platform<\/b><span style=\"font-weight: 400;\"> and add a website. For the <\/span><b>Site URL,<\/b><span style=\"font-weight: 400;\"> put <\/span><b>http:\/\/localhost:8000,<\/b><span style=\"font-weight: 400;\"> and then in the <\/span><b>App Domains,<\/b><span style=\"font-weight: 400;\"> put just <\/span><b>localhost<\/b><span style=\"font-weight: 400;\">, like the picture below:<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61173 size-large\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp2-1024x500.png\" alt=\"\" width=\"625\" height=\"305\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp2-1024x500.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp2-300x146.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp2-768x375.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp2-1536x750.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp2-624x304.png 624w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp2.png 1912w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<p><span style=\"font-weight: 400;\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-61174 size-large alignnone\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp3-1024x283.png\" alt=\"\" width=\"625\" height=\"173\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp3-1024x283.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp3-300x83.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp3-768x212.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp3-1536x425.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp3-624x173.png 624w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp3.png 1912w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/span><\/p>\n<p><strong>Note: For Facebook, we can\u2019t use 127.0.0.1 as the callback. Instead, use the localhost.<\/strong><\/p>\n<p><strong><em>Save changes and we are good to go. Now update the login.html file with the Facebook link:<\/em><\/strong><\/p>\n<pre><span style=\"font-weight: 400;\">{% extends 'base.html' %}<\/span>\r\n\r\n<span style=\"font-weight: 400;\">{% block title %}Login Page{% endblock title %}<\/span>\r\n\r\n<span style=\"font-weight: 400;\">{% block content %}\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span>\r\n\r\n<span style=\"font-weight: 400;\">&lt;h2&gt;Login&lt;\/h2&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&lt;form method=\"post\"&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{% csrf_token %}<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{{ form.as_p }}<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\"&gt;Login&lt;\/button&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&lt;\/form&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&lt;br&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">&lt;!-- Social Auth Buttons --&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">&lt;divclass=\"text-center\"&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">&lt;ahref=\"{% url 'social:begin' 'facebook' %}\"class=\"btn btn-primary\"&gt;&lt;iclass=\"fab fa-facebook-f\"&gt;&lt;\/i&gt; Login with Facebook&lt;\/a&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">&lt;\/div&gt;<\/span><\/pre>\n<p><strong><em>Note that the important part to start the Facebook authentication is {% url &#8216;social:begin&#8217; &#8216;facebook&#8217; %}.<\/em><\/strong><\/p>\n<p><b>Let\u2019s try it now. Click on login with Facebook.<\/b><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61175 size-large\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp4-1024x500.png\" alt=\"\" width=\"625\" height=\"305\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp4-1024x500.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp4-300x146.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp4-768x375.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp4-1536x750.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp4-624x304.png 624w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp4.png 1912w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<p><em><strong>Successfully logged in with Facebook.<\/strong><\/em><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61176 size-large\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp5-1024x500.png\" alt=\"\" width=\"625\" height=\"305\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp5-1024x500.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp5-300x146.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp5-768x375.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp5-1536x750.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp5-624x304.png 624w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp5.png 1912w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<h2><b><i>Django GitHub Login:<\/i><\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Log in to your <\/span><b>GitHub<\/b><span style=\"font-weight: 400;\"> account, and go to <\/span><b>Settings<\/b><span style=\"font-weight: 400;\">. In the left menu, you will see <\/span><b>Developer settings<\/b><span style=\"font-weight: 400;\">. Click on <\/span><b>OAuth apps<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the <\/span><b>OAuth applications<\/b><span style=\"font-weight: 400;\"> screen, click on <\/span><b>Register a new application<\/b><span style=\"font-weight: 400;\">. Or simply click on the link \u2013 <\/span><a href=\"https:\/\/github.com\/settings\/applications\/new\"><span style=\"font-weight: 400;\">https:\/\/github.com\/settings\/applications\/new<\/span><\/a><\/p>\n<p><em><strong>Provide the information below:<\/strong><\/em><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61177 size-large\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp6-1024x500.png\" alt=\"\" width=\"625\" height=\"305\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp6-1024x500.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp6-300x147.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp6-768x375.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp6-1536x750.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp6-624x305.png 624w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp6.png 1912w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">The most important step is the <\/span><b>Authorization callback URL<\/b><span style=\"font-weight: 400;\">. I\u2019m putting a localhost URL. <\/span><b>http:\/\/localhost:8000\/oauth\/complete\/github\/<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">After you create the app, you will be redirected to this screen:<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61178 size-large\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp7-1024x500.png\" alt=\"\" width=\"625\" height=\"305\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp7-1024x500.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp7-300x147.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp7-768x375.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp7-1536x750.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp7-624x305.png 624w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp7.png 1912w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<p><b>Now we update the settings.py with the client ID and client Secret:<\/b><\/p>\n<pre><span style=\"font-weight: 400;\">SOCIAL_AUTH_GITHUB_KEY = 'AUTH_GITHUB_KEY'<\/span><\/pre>\n<pre><span style=\"font-weight: 400;\">SOCIAL_AUTH_GITHUB_SECRET = 'AUTH_GITHUB_SECRET'<\/span><\/pre>\n<h3><b>Login View<\/b><\/h3>\n<p>Let\u2019s create a Login View that can handle the GitHub Login. The default login view looks for a template in login.html. Let\u2019s create it:<\/p>\n<pre><b>login.html<\/b>\r\n\r\n<span style=\"font-weight: 400;\">{% extends 'base.html' %}<\/span>\r\n\r\n<span style=\"font-weight: 400;\">{% block title %}Login Page{% endblock title %}<\/span>\r\n\r\n<span style=\"font-weight: 400;\">{% block content %}\u00a0<\/span>\r\n\r\n\r\n<span style=\"font-weight: 400;\">&lt;h2&gt;Login&lt;\/h2&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&lt;form method=\"post\"&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{% csrf_token %}<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{{ form.as_p }}<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\"&gt;Login&lt;\/button&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&lt;\/form&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&lt;br&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">&lt;!-- Social Auth Buttons --&gt;<\/span>\r\n\r\n\r\n<span style=\"font-weight: 400;\">&lt;divclass=\"text-center\"&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">&lt;a href=\"{% url 'social:begin' 'github' %}\" class=\"btn btn-warning\"&gt;&lt;i class=\"fab fa-github\"&gt;&lt;\/i&gt; Login with Github&lt;\/a&gt;<\/span>\r\n\r\n<span style=\"font-weight: 400;\">&lt;\/div&gt;<\/span><\/pre>\n<p><span style=\"font-weight: 400;\">\u00a0<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><em><strong>Note that the important part of starting the GitHub authentication is {% url &#8216;social:begin&#8217; &#8216;github&#8217; %}.<\/strong><\/em><\/p>\n<p><strong>Now, the login page should look like this:<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61179 size-large\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp8-1024x500.png\" alt=\"\" width=\"625\" height=\"305\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp8-1024x500.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp8-300x147.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp8-768x375.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp8-1536x750.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp8-624x305.png 624w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp8.png 1912w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<p><em><strong>Successfully logged in with GitHub.<\/strong><\/em><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-61180 size-large\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp9-1024x500.png\" alt=\"\" width=\"625\" height=\"305\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp9-1024x500.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp9-300x147.png 300w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp9-768x375.png 768w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp9-1536x750.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp9-624x305.png 624w, \/blog\/wp-ttn-blog\/uploads\/2024\/04\/blogp9.png 1912w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/p>\n<p>Thank You.<\/p>\n<div class=\"ap-custom-wrapper\"><\/div><!--ap-custom-wrapper-->","protected":false},"excerpt":{"rendered":"<p>Social authentication is a powerful feature that allows users to log in to your Django web application using their social media accounts like Facebook, Google, Twitter, and more. It simplifies users&#8217; registration and login process while providing additional user data for your application. Basic Setup: Step 1: Installation \u2013 First, install the django-social-auth library using [&hellip;]<\/p>\n","protected":false},"author":1528,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":128},"categories":[1994,1],"tags":[1221,4043,703,503,1358,5821],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/61181"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/1528"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=61181"}],"version-history":[{"count":2,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/61181\/revisions"}],"predecessor-version":[{"id":61266,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/61181\/revisions\/61266"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=61181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=61181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=61181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}