Django: Inscrivez-Vous Avec Votre Compte Facebook

Mvogo

16 May 2022

Django a crée un  moyen assez rapide pour s'inscrire à l'aide son compte Facebook. Il s"agit d'installer la librairie social-auth-app-django:

pip install social-auth-app-django

 

On ne vous le conseille sans doute jamais assez mais avant tout cela, il est conseillé d'installer un environnement virtuel soit dans Windows ou Linux:

py -3 -m venv env
.\env\Scripts\activate

 

N'oubliez pas par la suite d'installer Django via cette commande:

pip install django

 

 

 

Commençons le projet:

django-admin startproject facebook
cd facebook
python manage.py startapp mainApp

 

 settings.py :

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',   
    'social_django',        #Ajout
    'mainApp',              #Ajout
]MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'social_django.middleware.SocialAuthExceptionMiddleware', #Ajout
]TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'social_django.context_processors.backends',    #Ajout
            ],
        },
    },
]
#Add this at the bottom in settings.py
#social app custom settings

AUTHENTICATION_BACKENDS = [
    'social_core.backends.facebook.FacebookOAuth2',
    'django.contrib.auth.backends.ModelBackend',
]LOGIN_URL = 'login'
LOGIN_REDIRECT_URL = 'home'
LOGOUT_URL = 'logout'
LOGOUT_REDIRECT_URL = 'login'SOCIAL_AUTH_FACEBOOK_KEY = "#############"
SOCIAL_AUTH_FACEBOOK_SECRET = "############"#for extra info
SOCIAL_AUTH_FACEBOOK_SCOPE = [
    'email',
]

 views.py :

from django.shortcuts import render
from django.contrib.auth.decorators import login_required# Create your views here.def login(request):
    return render(request, 'login.html')@login_required
def home(request):
    return render(request, 'home.html')

 

index.css :

.container-fluid {
      height: 100vh;
      background-color: #fff;
      display: flex;
      justify-content: center;
      align-items: center;
}.container-fluid > div {
      width: 85%;
      min-width: 300px;
      max-width: 500px;
}.card{
      width: 100%;
      background-color: #282c34;
}.social-container {
      display: flex;
      flex-direction: column;
      justify-content: center;
}.btn a, .btn a:hover {
     color: white;
text-decoration: none;
}

 

base.html : 

{% load static %}
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-                       1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
        <link rel="stylesheet" href="{% static 'index.css' %}" />
<title>Django Social Auth</title>
</head>
<body>
   <div class="container-fluid">
   <div>
   <h1 class="text-white text-center">{% block title %}{% endblock %}</h1>
   <div class="card p-5">
{% block content %}
{% endblock %}
           </div>
        </div>
      </div>
   </body>
</html>

 

login.html :

{% extends 'base.html' %}
{% block title %}Sign in {% endblock %}
{% block content %}
<div class="row">
<div class="col-md-8 mx-auto social-container my-2 order-md-1">
<button class="btn btn-primary mb-2">
<a href="{% url 'social:begin' 'facebook' %}">Login With Facebook</a>
</button>
</div>
</div>
{% endblock %}

 home.html :

{% extends 'base.html' %}
{% block title %} HOme {% endblock %}
{% block content %}
<div class="row">
<div class="col-sm-12 mb-3">
<h4 class="text-center">Welcome {{ user.username }}</h4>
</div>
</div>
{% endblock %}

 

facebook/urls.py :

from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views
from mainApp import viewsurlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login, name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
    path('social-auth/', include('social_django.urls', namespace='social')),
    path("", views.home, name='home'),
]

 

Créer un compte Facebook développeur et récupérer les codes nécessaires afin de les utiliser via setting.py:

SOCIAL_AUTH_FACEBOOK_KEY = "#############"
SOCIAL_AUTH_FACEBOOK_SECRET = "############"

 

Enfin on finit par la migration des données:

python manage.py makemigrations
python manage.py migrate

 

 

On lance l'application:

python manage.py runserver