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