Symfony 4.0
此过程尚未从symfony
3更改为4,但是这里是使用新推荐的AbstractController的示例。无论是
security.token_storage和
session服务注册在父
getSubscribedServices方法,所以你不要有添加这些在你的控制器。
use SymfonyComponentSecurityCoreAuthenticationTokenUsernamePasswordToken;use SymfonyBundleframeworkBundleControllerAbstractController;use YourNameSpaceUserBundleEntityUser;class LoginController extends AbstractController{ public function registerAction() { $user = //Handle getting or creating the user entity likely with a posted form $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles()); $this->container->get('security.token_storage')->setToken($token); $this->container->get('session')->set('_security_main', serialize($token)); // The user is now logged in, you can redirect or do whatever. }}Symfony 2.6.x-Symfony 3.0.x
从symfony 2.6开始
security.context,不推荐使用
security.token_storage。控制器现在可以简单地是:
use SymfonyComponentSecurityCoreAuthenticationTokenUsernamePasswordToken;use SymfonyBundleframeworkBundleControllerController;use YourNameSpaceUserBundleEntityUser;class LoginController extends Controller{ public function registerAction() { $user = //Handle getting or creating the user entity likely with a posted form $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles()); $this->get('security.token_storage')->setToken($token); $this->get('session')->set('_security_main', serialize($token)); }}尽管不推荐使用此功能
security.context,但仍可以向后兼容,因此仍可以使用。只需准备为Symfony 3更新它
您可以在此处阅读有关2.6更改的更多信息:https
:
//github.com/symfony/symfony/blob/2.6/UPGRADE-2.6.md
Symfony 2.3.x版
要在symfony 2.3中实现此目的,您不再可以仅在安全上下文中设置令牌。您还需要将令牌保存到会话中。
假设安全文件带有防火墙,例如:
// app/config/security.ymlsecurity: firewalls: main: //firewall settings here
和控制器动作也类似:
use SymfonyComponentSecurityCoreAuthenticationTokenUsernamePasswordToken;use SymfonyBundleframeworkBundleControllerController;use YourNameSpaceUserBundleEntityUser;class LoginController extends Controller{ public function registerAction() { $user = //Handle getting or creating the user entity likely with a posted form $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles()); $this->get('security.context')->setToken($token); $this->get('session')->set('_security_main',serialize($token)); //Now you can redirect where ever you need and the user will be logged in }}对于令牌的创建,您将需要创建一个
UsernamePasswordToken,它接受4个参数:用户实体,用户凭据,防火墙名称,用户角色。您无需提供用户凭据即可使令牌有效。
security.context如果您要立即重定向,我不是100%确定必须在上设置令牌。但这似乎没有伤害,所以我离开了。
然后是重要的部分,设置会话变量。变量命名约定
_security_后跟您的防火墙名称,在这种情况下
main,
_security_main



