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 :

Problème avec REMEMBER ME et site multi-langes avec locale [2.x]


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Problème avec REMEMBER ME et site multi-langes avec locale
    Bonjour,

    j'ai développé ma propre gestion des utilisateurs, je ne souhaite pas utiliser FOSUserBundle, mon code est donc très proche de celui décrit ici (https://www.wanadev.fr/kit-survie-ge...fosuserbundle/)

    J'ai également une fonction "se souvenir de moi" lors de la connexion, qui marchait tres bien, jusqu'au jour où j'ai décidé de rendre le site multi-langues, en ajoutant la locale dans toutes les URLS.
    A partir de là, la récupération de l'utilisateur "automatique" via le cookie remember me ne fonctionne plus, pourtant le cookie est bien créé lors de l'authentification.

    Un peut de code :

    Le security.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    member_area:
                pattern:   ^/{_locale}/member
                anonymous: false
                provider:  main
                context:   member_area
                form_login:
                    login_path: register_index
                    check_path: register_login
                remember_me:
                    key:       %secret% # %secret% est un paramètre de parameters.yml
                    lifetime:  2592000 # 30 days
                    path:      /
                    domain:    ~ # Prend la valeur par défaut du domaine courant depuis $_SERVER
                    name:      REMEMBERME
                    always_remember_me: true
                    remember_me_parameter: _remember_me
    La création du cookie lors de l'authentification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    $token = new UsernamePasswordToken($user, $user->getPassword(), 'member_area', array('ROLE_USER'));
    	        $this->get("security.context")->setToken($token);
     
    	        $response = new RedirectResponse($this->generateUrl('user_index'));
     
    	        if ($request->get('_remember_me') == 'on'){
     
    				// write cookie for persistent session storing
    				$providerKey = 'main'; // defined in security.yml
    				$securityKey = $this->container->getParameter('secret');// defined in security.yml
     
    				$rememberMeService = new TokenBasedRememberMeServices(array($this->getDoctrine()->getManager()->getRepository('UserBundle:User')), $securityKey, $providerKey, array(
    				                'path' => '/',
    				                'name' => 'REMEMBERME',
    				                'domain' => null,
    				                'secure' => false,
    				                'httponly' => true,
    				                'lifetime' => 2592000, // 30 days
    				                'always_remember_me' => true,
    				                'remember_me_parameter' => '_remember_me')
    				            );
     
    				$rememberMeService->loginSuccess($request, $response, $token);
    			} else {
    				$response->headers->clearCookie('REMEMBERME');
    			}
     
    	        $event = new InteractiveLoginEvent($request, $token);
            	$this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
     
            	return $response;
    Le routing.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    user:
        resource: "@UserBundle/Resources/config/routing.yml"
        prefix:   /{_locale}/member
        requirements:
            _locale: "[a-zA-Z0-9]{2}"
     
    root:
        pattern: /
        defaults:
            _controller: FrameworkBundle:Redirect:urlRedirect
            path: /%locale%/
            permanent: true
     
    core:
        resource: "@CoreBundle/Resources/config/routing.yml"
        prefix:   /{_locale}
        requirements:
            _locale: "[a-zA-Z0-9]{2}"
    Il y a autre chose d'étrange surement lié a ce probleme, le systeme de redirection automatique "login_path" vers la page de login quand on essaye d'entrer dans une zone protégée sans authorisation ne fonctionne plus depuis que j'ais mis en place les locales dans les Urls.

    Il y a bien une erreur symfony "Authorisation invalide" mais pas de redirection vers la page de login, alors qu'avant sans le syteme multilangues et les locales dans les Urls, tout ça marchait tres bien...

    Merci de votre aide, je ne comprends pas d'où ça peut venir, si vous avez besoin de plus d'infos n'hesitez pas....

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    j'ais (enfin) trouvé la solution, pour ceux que ça intéresse, dans les grandes lignes j'ai juste fait 2 petites retouches a mon security.yml :

    1. il ne faut pas mettre de {_locale} dans les path, et surtout retirer le ^ au début des chemins, juste laisser /mon_url_a_proteger, pareil dans les access_control
    2. j'ai déménager la section remember_me vers le firewall public, du coup le cookie est bien récupéré dès le départ, ce qui n'etait pas le cas avant

    Voila c'est tout, ça remarche nikel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/01/2016, 17h44
  2. Site multi-langue avec masterPage
    Par AghilasB dans le forum ASP.NET
    Réponses: 3
    Dernier message: 05/10/2009, 14h47
  3. Problème avec config d'un site web
    Par BZH75 dans le forum Dépannage et Assistance
    Réponses: 1
    Dernier message: 04/09/2007, 23h17
  4. Réponses: 2
    Dernier message: 30/05/2007, 23h35
  5. Problème site multi langues
    Par dolf13 dans le forum Langage
    Réponses: 9
    Dernier message: 31/08/2006, 12h05

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