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:
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:
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:
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....