我有一个控制器,应该通过一个简单的表单添加用户,但我不能让用户手动验证。
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken
public function addAction($user)
{
$token =new UsernamePasswordToken(
$user->getUsername(),
$user->getPassword(),
'secured_area',
$user->getRoles()
);
$this->get('security.context')->setToken($token);
// as suggested in some other answers
$request->getSession()->set('_security_secured_area', serialize($token));
// as suggested in http://techblog.zabuchy.net/2012/manually-authenticate-symfony-2-user/
return $this->redirect($this->generateUrl('acme_project_secure_show' )
);
}
}
重定向到安全路由有效,但是方法$this->getUser()
返回null,因为未正确设置身份验证...
我可以从$user= $this->get('security.context')->getToken();
而不是$user= $this->get('security.context')->getToken()->getUser();
的{{1}}快捷方式获取用户,请参阅图书here
知道为什么吗?
答案 0 :(得分:6)
问题解决了 - 缺少两点:1)有必要为链接发送InteractiveLoginEvent
-thanks mpm 2)此控制器的路由不在secured_area
防火墙下 - merci Florian ;)
答案 1 :(得分:0)
你可以试试这个
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken
$token = new UsernamePasswordToken($user, $user->getPassword(), "firewallname", $user->getRoles());
答案 2 :(得分:-1)
如上所述@ user19340357,您可以手动实例化令牌。
他忘了说的是你应该在安全环境中设置它:
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken
$token = new UsernamePasswordToken($user, $user->getPassword(), "firewallname", $user->getRoles());
$securityContext = $this->container->get('security.context'); // do it your way
$securityContext->setToken($token);