IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

sfGuardAuth signout ne vide pas le cookie


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Par défaut sfGuardAuth signout ne vide pas le cookie
    Bonjour,

    J'ai un souci avec la méthode "signout" du plugin sfDoctrineGuardPlugin.

    Lorsque je coche la case "mémoriser mon mot de passe" lors de l'authentification, je suis bien connecté et le cookie est bien créé.

    Si je ferme mon navigateur et que je retourne sur mon site je suis bien reconnecté automatiquement. Par contre si je clic sur mon lien de déconnexion, le cookie n'est pas supprimé, je suis donc en permanence connecté si je ne supprime le cookie à la main.

    Je vois bien que le logout passe par la méthode signout, mais la partie :
    sfContext::getInstance()->getResponse()->setCookie($remember_cookie, '', time() - $expiration_age);
    ne fonctionne pas. Je n'ai pourtant pas d'erreur.

    NB : sans le cookie je parviens bien à me déconnecter

    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Sauf erreur de ma part, le fais de cocher "remeber me" permet de se reconnecter dés que l'on arrive sur le site. Même si l'on a fait un logout avant.

    Ce que tu décris est le fonctionnement normal de l'application.

    Essaye en décochant la case lors du login, cela devrait chanter le comportement dans le sens que tu souhaites.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Le comportement du "remember me" n'est-il pas plutôt de pouvoir se reconnecter automatiquement lorsque la session a expiré ?
    (et non lorsque l'utilisateur s'est volontairement déconnecté)

    Si je dis une grosse bêtise, merci de ne pas frapper

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Par défaut
    bonjour,

    le problème c'est que si je me connecte en cochant la case remember me, je ne peux plus me déconnecter sans supprimer le cookie à la main. En cliquant sur logout, je retourne sur ma page d'accueil en étant connecté et non la page de login. Pourtant dans routing.yml:
    sf_guard_signout:
    url: /logout
    param: { module: sfGuardAuth, action: signout }
    Ainsi que le lien :
    <?php echo link_to(__('Déconnexion'), '@sf_guard_signout') ?>
    @mimi68, quand je regarde le code du plugin je pense pas que ce soit le fonctionnement:
    /**
    * Signs out the user.
    *
    */
    public function signOut()
    {
    $this->getAttributeHolder()->removeNamespace('sfGuardSecurityUser');
    $this->user = null;
    $this->clearCredentials();
    $this->setAuthenticated(false);
    $expiration_age = sfConfig::get('app_sf_guard_plugin_remember_key_expiration_age', 15 * 24 * 3600);
    $remember_cookie = sfConfig::get('app_sf_guard_plugin_remember_cookie_name', 'sfRemember');
    sfContext::getInstance()->getResponse()->setCookie($remember_cookie, '', time() - $expiration_age);
    }
    A priori, quand je me déconnecte, il supprime automatiquement le cookie, enfin normalement

    Merci de votre aide

  5. #5
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    C'est dans l'idée du remember me.

    Tu quittes l'application par une déconnexion ou pas. Lors du lancement de l'application (une fois que le cookie de session est mort, ou parce qu'il est tué par un logout), le filtre remember me va, automatiquement, recréer l'authentification, sans passer par l'action de login. Et le fait de passer par le login, va chuinter le form pour ce loguer directement.

    Si tu veux que tes utilisateurs se reconnectent à chaque connexion, il faut supprimer le système remeber me.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Par défaut
    Salut mimi68,

    Je suis bien d'accord avec toi. le problème est que si je fait un logout le cookie n'est pas modifié. Il reste donc actif et sans supprimer le cookie en allant dans les options de firefox ou autre navigateur, je dois attendre que le cookie expire.

    en gros le logout n'arrive pas à effectuer l'action suivante:
    sfContext::getInstance()->getResponse()->setCookie($remember_cookie, '', time() - $expiration_age);
    Je ne comprends pas pourquoi ça fonctionne pas, car je n'ai aucune erreur d'indiquée

  7. #7
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Bon, on tourne en rond là.

    On va partir par une autre voie, quel est le comportement que tu souhaiterais voir dans ton application (en oubliant ce qui s'y passe).

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Par défaut
    ok désolé si je n'ai pas été clair.

    en fait le fonctionnement souhaité est que si je me connecte en cochant la case remember me, ça me créé un cookie. Donc si je me ferme mon navigateur et que le cookie n'est pas expiré et que je retourne sur le site je suis automatiquement reconnecté. Jusque là tout va bien, c'est ce qui se passe.

    Ensuite, lorsque je suis connecté (toujours grâce au cookie) et que je clic sur mon lien logout qui lance la fonction signout, je souhaite revenir sur la page de login (ce qui n'est pas le cas) et que le cookie soit vidé et passé en expiré.

    Or quand je clic sur logout je n'arrive pas sur la page de login et je reste toujours connecté sur ma home page et le cookie est toujours valide avec les données du champ remember_key de ma table sf_guard_remember_key

    En espérant avoir été plus clair.

    Merci
    Désolé pour tous ces posts.

  9. #9
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Ce qui est le comportement normal du remember me. En effet, dans les filtres du as rajouté le filtre remember qui vérifie si tu es authentifié et si non, il t'identifie.

    Donc quant du fait un logout, derrière, tu ré-affiches une page, le filtre te voie non connecté et zou, il te reconnecte. Mais on est dans le fonctionnement normal du remember.

    Maintenant, il faudrait modifier le remember pour qu'il t'oublie si tu fais un logout, et qu'il "décoche" la case du remember. Mais je ne vois pas trop l'intérêt. Dans ce cas là, il suffit de ne pas cocher le remember lors du logout. Ensuite, plus de problème, plus de cookie, ta session fonctionne normalement, mais quant tu quittes, il faut y refaire un login, ce qui me semble tout aussi logique.

    J'ai un peu l'impression que tu essayes de faire des "trucs" qui existent mais d'une manière très compliquée.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Par défaut
    Salut mimi68,

    ok pour le mode de fonctionnement du remember me. Mais alors quel est l'intérêt de mettre un lien logout lorsque l'on est connecté si on doit attendre que le cookie soit périmé pour pouvoir changer de compte.

    je vais essayer de me débrouiller soit en modifiant mon fichier routing.yml pour le signout ou surcharger la méthode signout pour faire ce qu'il faut.

    Merci.

  11. #11
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    L'intérêt est pour les utilisateurs qui n'ont coché la case.

    Je vois ta problématique de changement de compte utilisateur, je vais y réfléchir.

  12. #12
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Bon, je reviens sur ce que j'ai dit.

    J'ai créé une petite application de test avec sfDoctrineGuradPlugin (5.0.0), et une table pour avoir un brin de contenu.

    J'ai installé comme dit dans la doc de sfDoctrineGuardPlugin sauf pour les routes pour login et logout qui devraient être déclarée automatiquement et ne le sont pas, il faudra que je jette un œil au code du plugin, mais c'est un autre problème.

    J'ai rajouté le plugin pmSuperfishMenuPlugin pour avoir vite fait un menu utilisable.

    J'ai généré un bête module sur ma table de donnés pour avoir l'impression d'avoir une application.

    Le login remember:off permet de se logger et travailler. Un logout renvoie sur la page de login.

    Le login remember:on permet de se logger et travailler. La perte de session (simulée) permet, à l'ouverture suivante d'éviter de ce connecter. Un logout renvoie sur la page de login avec demande de ré-authentification.

    Ce qui correspond effectivement à un comportement plus sains de l'application.

    Je supposer qu'il y a "une couille dans le potage" au niveau de ta configuration.

    Je te propose de prendre 15mn pour faire une petite application de test dans le même style que celle que j'ai faîte pour tester, en dehors de ton contexte, et une fois ceci maitrisé, te replonger dans ton application pour voir où est la couille !

Discussions similaires

  1. [1.x] sfGuardAuth signout ne vide pas la barre d'adresse
    Par damiensan dans le forum Symfony
    Réponses: 5
    Dernier message: 17/05/2010, 20h12
  2. Champ BLOB qui ne se vide pas.
    Par pifou02 dans le forum Firebird
    Réponses: 4
    Dernier message: 05/10/2007, 11h02
  3. [Cluster Tomcat] Pas de cookie de session sous IE
    Par goeland444 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 24/04/2007, 10h58
  4. [Cookies] Pas de cookie malgré session_start() sous IE
    Par webrider dans le forum Langage
    Réponses: 5
    Dernier message: 01/04/2007, 11h16
  5. [Cookies] pas de cookie
    Par Longrais dans le forum Langage
    Réponses: 2
    Dernier message: 21/11/2005, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo