Symfony 2 redirecten authenticatie valt weg
Hallo php'ers,
Ben bezig met symfony en laat iemand 'vanuit een controller' inloggen (niet vanuit een form omdat het via een activatielink gebeurt). Ik wil na dit inloggen de gebruiker doorverwijzen naar zijn profielpagina alleen is het probleem dat hij dan niet meer 'authenticated' is. Bij het renderen van een twigtemplate staat het ook goed en bij new RedirectResponse gaat het ook goed alleen bij deze twee methoden wordt de url in de adresbalk niet aangepast.
In de profiler bar van symfony staat wel 'logged in as' correct alleen er staat dan 'authenticated' no.
Heeft iemand enig idee waar dit door komt, of in ieder geval een aanwijzing kan geven waar ik het in moet zoeken?
Ben bezig met symfony en laat iemand 'vanuit een controller' inloggen (niet vanuit een form omdat het via een activatielink gebeurt). Ik wil na dit inloggen de gebruiker doorverwijzen naar zijn profielpagina alleen is het probleem dat hij dan niet meer 'authenticated' is. Bij het renderen van een twigtemplate staat het ook goed en bij new RedirectResponse gaat het ook goed alleen bij deze twee methoden wordt de url in de adresbalk niet aangepast.
In de profiler bar van symfony staat wel 'logged in as' correct alleen er staat dan 'authenticated' no.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$user = $em->getRepository('TestBundle:Users')->findOneById($userId);
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.token_storage')->setToken($token);
//Dit werkt niet. De gebruiker is dan niet meer authenticatied (de pagina wordt wel geladen)
return $this->redirect($this->generateUrl('profiel_pagina', array('user' => $user)));
//Dit werkt wel (na returnen) alleen wordt de url van de routing profiel_persoon niet overgenomen
$response = new RedirectResponse($this->router->generate('profiel_persoon', array('user'=>$user)));
//Dit werkt ook alleen net als bij redirectresponse wordt de url niet netjes getoond.
return $this->render('TestBundle:Html:\Profiel\Persoon\persoonprofiel.htm.twig',array('user' => $user));
?>
$user = $em->getRepository('TestBundle:Users')->findOneById($userId);
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get('security.token_storage')->setToken($token);
//Dit werkt niet. De gebruiker is dan niet meer authenticatied (de pagina wordt wel geladen)
return $this->redirect($this->generateUrl('profiel_pagina', array('user' => $user)));
//Dit werkt wel (na returnen) alleen wordt de url van de routing profiel_persoon niet overgenomen
$response = new RedirectResponse($this->router->generate('profiel_persoon', array('user'=>$user)));
//Dit werkt ook alleen net als bij redirectresponse wordt de url niet netjes getoond.
return $this->render('TestBundle:Html:\Profiel\Persoon\persoonprofiel.htm.twig',array('user' => $user));
?>
Heeft iemand enig idee waar dit door komt, of in ieder geval een aanwijzing kan geven waar ik het in moet zoeken?
Gewijzigd op 18/11/2015 11:19:44 door Ama saril
Uitgaande van 'TestBundle' heb je dus je eigen bundle geschreven voor registreren, inloggen, etc? Misschien dat dit je op weg helpt: https://github.com/jmikola/AutoLogin (Bron
Je token is niet geauthenticate, alleen maar aangemaakt.
Uit je code lijkt t alsof je zelf iemand probeert in te loggen. Maak hier gebruik van het Symfony Security systeem. Zelf iemand in de code inloggen is heel ingewikkeld (en core team is al een jaar aan het bedenken om dit makkelijk te maken, maar dat is praktisch onmogelijk).
In de documentatie staat uitvoerig beschreven hoe je een inlog formulier maakt in Symfony: http://symfony.com/doc/current/cookbook/security/form_login_setup.html
Ook is er documentatie om de pagina waar een gebruiker naar geredirect wordt na het inloggen te veranderen: http://symfony.com/doc/current/cookbook/security/form_login.html#redirecting-after-success
Uit je code lijkt t alsof je zelf iemand probeert in te loggen. Maak hier gebruik van het Symfony Security systeem. Zelf iemand in de code inloggen is heel ingewikkeld (en core team is al een jaar aan het bedenken om dit makkelijk te maken, maar dat is praktisch onmogelijk).
In de documentatie staat uitvoerig beschreven hoe je een inlog formulier maakt in Symfony: http://symfony.com/doc/current/cookbook/security/form_login_setup.html
Ook is er documentatie om de pagina waar een gebruiker naar geredirect wordt na het inloggen te veranderen: http://symfony.com/doc/current/cookbook/security/form_login.html#redirecting-after-success
Gewijzigd op 18/11/2015 15:41:30 door Wouter J
Bedankt voor de reacties. De reden dat ik 'handmatig' iemand wil inloggen is de volgende:
Gebruikers loggen op een extern systeem in en krijgen dan een token terug. (Het inloggen ligt dus ergens anders). Nadat ze bij dat systeem correct zijn ingelogd komen ze terug op mijn systeem en wil ik ze dus in 'symfony' inloggen. Ik heb dus voor deze case geen inlogformulier nodig.
Nadat ze dus terug naar mij gedirect worden wil ik ze 'inloggen' zeg maar.
Ik zal in ieder geval even naar die autologin bundle kijken misschien dat ik daar wat mee kan.
Gebruikers loggen op een extern systeem in en krijgen dan een token terug. (Het inloggen ligt dus ergens anders). Nadat ze bij dat systeem correct zijn ingelogd komen ze terug op mijn systeem en wil ik ze dus in 'symfony' inloggen. Ik heb dus voor deze case geen inlogformulier nodig.
Nadat ze dus terug naar mij gedirect worden wil ik ze 'inloggen' zeg maar.
Ik zal in ieder geval even naar die autologin bundle kijken misschien dat ik daar wat mee kan.




