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

Signaler
Messages postés
1359
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
24 avril 2020
-
Messages postés
1359
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
24 avril 2020
-
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

Messages postés
1359
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
24 avril 2020
117
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));