[Symfony 3.2.2] Propager le token d'authentification

Résolu/Fermé
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - Modifié le 23 août 2017 à 14:24
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - 23 août 2017 à 14:46
Bonjour,

Avant tout, je n'utilise pas FOSUserBundle.

Je suis entrain de développer une méthode de redéfinition de mot de passe qui fonctionne comme suit :
1/ Page login: l'utilisateur indique son login et clique le lien "Mot de passe oublié ?"
2/ Un mail lui est envoyé avec un token valide durant 1h
3/ L'utilisateur clique sur le lien qu'il a reçu et arrive sur un formulaire de changement de mot de passe.

A partir du moment où il est sur le form de changement de MDP, la méthode derrière ça va récupérer l'objet USER correspondant au token afin de pouvoir setter son nouveau mdp et le sauvegarder en BDD.

Lors de la soumission du formulaire, et après enregistrement dans la BDD, je crée un token de type UsernamePasswordToken avec le login de l'utilisateur, son nouveau mdp encodé et son provider key.
$tokenAuthenticated = new UsernamePasswordToken($username, $password, $providerKey)


J'obtiens donc un objet UsernamePasswordToken :
object(stdClass)#1465 (7) {
["__CLASS__"]=>
string(74) "Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken"
["credentials:Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken:private"]=>
string(128) "1188c0df9e2cf0459665663b031a935352a404ca07d23d616adb3a54697aee908625d28b28984cf565c46e05a1e03b063c9cb63234c150be9739982ad6a9dfb2"
["providerKey:Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken:private"]=>
string(2) "CO"
["user:Symfony\Component\Security\Core\Authentication\Token\AbstractToken:private"]=>
string(5) "user1"
["roles:Symfony\Component\Security\Core\Authentication\Token\AbstractToken:private"]=>
array(48) {
[0]=>
string(41) "Symfony\Component\Security\Core\Role\Role"
[1]=>
string(41) "Symfony\Component\Security\Core\Role\Role"
[2]=>
.....
}
["authenticated:Symfony\Component\Security\Core\Authentication\Token\AbstractToken:private"]=>
bool(true)
["attributes:Symfony\Component\Security\Core\Authentication\Token\AbstractToken:private"]=>
array(0) {
}
}


Après ça, je redirige l'utilisateur sur une route qui fait un traitement simple :
Si l'utilisateur est logué, il accède à son tableau de bord sinon il est redirigé vers la page de login.
return $this->redirectToRoute('co_core_welcome');


J'ai essayé de le sauvegarder en session avec
$firewallContext ="mon_firewall_context";
$session = $this->get('session');
$session->set('_security_'.$firewallContext, serialize($tokenAuthenticated));
$session->save();


ou
$this->get('security.token_storage')->setToken($tokenAuthenticated);
$this->get('session')->set('co', serialize($tokenAuthenticated));

mais cela ne change rien.

Une fois que j'ai authentifié mon utilisateur à l'aide du token, quelle méthode de propagation faut-il utiliser ?
Merci

1 réponse

patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
23 août 2017 à 14:46
J'ai trouvé la solution, pour ceux que cela peut intéresser :

$tokenAuthenticated = new UsernamePasswordToken($user, $password, $providerKey, $role);

$firewallContext ="main";
$session = $this->get('session');
$session->set('_security_'.$firewallContext, serialize($tokenAuthenticated));
0