[Symfony 3.2.2] Propager le token d'authentification [Résolu/Fermé]

Messages postés
1342
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
8 juillet 2019
-
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
Afficher la suite 

1 réponse

Messages postés
1342
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
8 juillet 2019
101
0
Merci
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));