Projet

Général

Profil

Bug #9195

Modify logout view to take in account redirections.

Ajouté par Mikaël Ates il y a plus de 8 ans. Mis à jour il y a plus de 6 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
Début:
03 décembre 2015
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

views.logout make a full logout with iframes and then a local logout.

It may be necessary to make logout by redirections before local logout.

Logout fragments are collected from plugins calling logout_list functions. Those currently return iframe html fragments. So they could also return a uri.
To dinstinguish them and keep compatibility, the patch propose to pass the uri in a dict.


Fichiers

Révisions associées

Révision 9ae46032 (diff)
Ajouté par Mikaël Ates il y a environ 8 ans

Handle logout by redirection from plugins (fixes #9195).

A new plugin method called redirect_logout_list is used to collect
urls of logout endpoints.
The local logout is done before processing redirections. Urls are collected
when the user is logged in and put in session after is logged out.

Historique

#1

Mis à jour par Mikaël Ates il y a plus de 8 ans

  • Fichier 0001-Allow-redirections-in-logout-from-plugins.patch supprimé
#2

Mis à jour par Mikaël Ates il y a plus de 8 ans

  • Fichier 0001-Allow-redirections-in-logout-from-plugins.patch ajouté
#3

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

I would like the local logout to happen before the last redirection, so this patch is not acceptable currently.

#4

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

  • Version cible mis à 2.2.0
#5

Mis à jour par Mikaël Ates il y a plus de 8 ans

  • Fichier 0001-Handle-logout-by-redirection-from-plugins.patch ajouté

Local logout is now done before handling redirections.

The session dict is saved only when it's modified (https://docs.djangoproject.com/fr/1.9/topics/http/sessions/). That is not the case when I pop a value of a list recorded in the session. One solution is to use SESSION_SAVE_EVERY_REQUEST / request.session.modified. I prefered to pop the list from the dict, pop a value from it and record the list updated in the session.

#6

Mis à jour par Mikaël Ates il y a plus de 8 ans

  • Fichier 0001-Allow-redirections-in-logout-from-plugins.patch supprimé
#7

Mis à jour par Mikaël Ates il y a plus de 8 ans

  • Fichier 0001-Handle-logout-by-redirection-from-plugins.patch ajouté
#8

Mis à jour par Mikaël Ates il y a plus de 8 ans

  • Fichier 0001-Handle-logout-by-redirection-from-plugins.patch supprimé
#9

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

C'est là qu'un test autour du logout aurait-été bien... Est-ce que tu ne pourrais pas modifier un peu moins la structure de contrôle ? La fonction est déjà complexe, et le changement ne la simplifiant pas j'aurai préféré que le changement soit moins intrusif.

#10

Mis à jour par Mikaël Ates il y a plus de 8 ans

Patch revised to set the info message and do the set cookie only at the local logout.

#11

Mis à jour par Mikaël Ates il y a plus de 8 ans

  • Fichier 0001-Handle-logout-by-redirection-from-plugins.patch supprimé
#12

Mis à jour par Mikaël Ates il y a plus de 8 ans

La structure de contrôle sort de la fonction si l'utilisateur n'est pas loggué localement. Or la vue gère désormais les logouts par redirections après le logout local, ce qui m'a conduit à revoir la structure de contrôle. Si tu vois quelque chose de plus léger, dis moi.

#13

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

  • Assigné à changé de Benjamin Dauvergne à Mikaël Ates
#14

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

Avec le code actuel le next_url d'origine est perdu quand targets n'est pas vide, j'ajouterai le patch suivant;

diff --git a/src/authentic2/views.py b/src/authentic2/views.py
index ed348a2..13699bc 100644
--- a/src/authentic2/views.py
+++ b/src/authentic2/views.py
@@ -469,7 +469,7 @@ def logout(request, next_url=None, default_next_url='auth_homepage',
         local_logout_done = True
         # Put redirection targets in session (after logout)
         if targets:
-            request.session['logout_redirections'] = targets
+            request.session['logout_redirections'] = [next_url] + targets
     # Full logout by redirections if any
     targets = request.session.pop('logout_redirections', None)
     if targets:

Sinon on peut pousser je pense.

#15

Mis à jour par Mikaël Ates il y a environ 8 ans

J'ai ajouté next_url en fin de liste, car celle-ci est traitée avec pop(0), quelques commentaires et messages de debug.

#16

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

Ack.

#17

Mis à jour par Mikaël Ates il y a environ 8 ans

  • Statut changé de Nouveau à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#18

Mis à jour par Benjamin Dauvergne il y a environ 8 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#19

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Statut changé de Solution déployée à Fermé

Formats disponibles : Atom PDF