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
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 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
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
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;
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.
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 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....
Partager