Skip to content

Commit

Permalink
Améliore la connexion aux réseaux sociaux (#6003)
Browse files Browse the repository at this point in the history
* (SocialAuth) Un peu de nettoyage
* (SocialAuth) Redirige les membres après leur connexion
* (SocialAuth) Un seul compte peu importe le moyen de connexion
* (SocialAuth) Un peu de documentation
  • Loading branch information
Situphen authored Jun 19, 2022
1 parent 57aaad8 commit 8784520
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 9 deletions.
11 changes: 11 additions & 0 deletions doc/source/back-end/member.rst
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,17 @@ Le clic sur "Me désinscrire" entraîne alors une série d'action (qui sont **ir
.. _tutoriels: ../tutorial/tutorial.html


Inscription et connexion par délégation d'authentification
==========================================================

On utilise la bibliothèque ``social-auth-app-django`` pour permettre l'inscription et la connexion par délégation d'authentification. Les visiteurs peuvent se connecter à partir de leur compte Facebook ou Google et un compte Zeste de Savoir leur est créé lors de la première connexion. Les seules différences entre les comptes Zeste de Savoir créés traditionnellement et ceux créés par délégation d'authentification sont l'absence de mot de passe défini pour Google et Facebook ainsi que l'absence d'adresse de courriel pour Facebook. Pour ce dernier point, il s'agit d'un soucis qu'il faudrait investiguer et corriger dans le futur. Outre ces deux points, il ne devrait pas y avoir de différence entre ces deux types de comptes Zeste de Savoir.

Si un visiteur se connecte une première fois avec son compte Google puis la fois suivante avec son compte Facebook, et si les deux comptes sont liés à la même adresse de courriel, alors les deux comptes devraient être liés en théorie au même compte Zeste de Savoir. Pour cette raison, si d'autres services venaient à être ajouter dans le futur, il faut s'assurer au préalable que ceux-ci valident bien l'adresse de courriel lors de l'inscription, sinon une usurpation du compte Zeste de Savoir serait possible.

Les paramètres liés à la bibliothèque ``social-auth-app-django`` sont définis dans le fichier de configuration ``zds/settings/abstract_base/requirements.py``. Si vous avez besoin de tester le fonctionnement de cette bibliothèque, des comptes de tests existent pour Facebook et Google. Demandez des renseignements aux responsables de l'équipe technique.

Actuellement, si l'on souhaite tester la connexion à Google en local il faut utiliser ``127.0.0.1`` tandis que si l'on souhaite tester la connexion à Facebook il faut utiliser ``localhost``.

Les membres dans les environnement de test et de développement
==============================================================

Expand Down
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# Implicit dependencies (optional dependencies of dependencies)
elasticsearch-dsl==5.4.0
elasticsearch==5.5.3
python-social-auth==0.3.6
social-auth-app-django==5.0.0

# Explicit dependencies (references in code)
Expand Down
2 changes: 1 addition & 1 deletion templates/member/includes/login_button.part.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{% captureas route_name %}{% if network == "facebook" %}facebook{% else %}google-oauth2{% endif %}{% endcaptureas %}
{% captureas icon_path %}images/brands/{{ network }}.svg{% endcaptureas %}

<a href="{% url "social:begin" route_name %}" class="btn is-social-login is-{{ network }}">
<a href="{% url "social:begin" route_name %}{% if next_page %}?next={{ next_page }}{% endif %}" class="btn is-social-login is-{{ network }}">
<img src="{% static icon_path %}" alt="{{ network | capfirst }}" />
<span>Se connecter avec {{ network | capfirst }}</span>
</a>
2 changes: 1 addition & 1 deletion zds/member/views/login.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,4 @@ def login_view(request):
form.helper.form_action += "?next=" + next_page
csrf_tk["error"] = error
csrf_tk["form"] = form
return render(request, "member/login.html", {"form": form, "csrf_tk": csrf_tk})
return render(request, "member/login.html", {"form": form, "csrf_tk": csrf_tk, "next_page": next_page})
10 changes: 4 additions & 6 deletions zds/settings/abstract_base/requirements.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@

SOCIAL_AUTH_RAISE_EXCEPTIONS = False

SOCIAL_AUTH_GOOGLE_OAUTH2_USE_DEPRECATED_API = True
SOCIAL_AUTH_FACEBOOK_SCOPE = ["email"]

SOCIAL_AUTH_PIPELINE = (
Expand All @@ -21,24 +20,23 @@
"social.pipeline.social_auth.auth_allowed",
"social.pipeline.social_auth.social_user",
"social.pipeline.user.get_username",
"social.pipeline.social_auth.associate_by_email",
"social.pipeline.user.create_user",
"zds.member.models.save_profile",
"social.pipeline.social_auth.associate_user",
"social.pipeline.social_auth.load_extra_data",
"social.pipeline.user.user_details",
)

# Before adding new providers such as Facebook and Google,
# you need to make sure they validate the user's email address on sign up!
# If they don't, a malicious person could take control of someone else account!
SOCIAL_AUTH_FACEBOOK_KEY = social_auth_config.get("facebook_key", "")
SOCIAL_AUTH_FACEBOOK_SECRET = social_auth_config.get("facebook_secret", "")

SOCIAL_AUTH_TWITTER_KEY = social_auth_config.get("twitter_key", "")
SOCIAL_AUTH_TWITTER_SECRET = social_auth_config.get("twitter_secret", "")

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = social_auth_config.get(
"google_oauth2_key",
"696570367703-r6hc7mdd27t1sktdkivpnc5b25i0uip2.apps.googleusercontent.com",
)

SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = social_auth_config.get(
"google_oauth2_secret",
"mApWNh3stCsYHwsGuWdbZWP8",
Expand Down

0 comments on commit 8784520

Please sign in to comment.