Php symfony2以编程方式对用户进行身份验证
我刚刚完成了本教程: (包括“在会话中存储身份验证”) 它通过api密钥工作并授权用户,并在会话中成功存储身份验证 但是,我不知道如何通过该身份验证方法以编程方式对用户进行身份验证 我试过这样的方法:Php symfony2以编程方式对用户进行身份验证,php,symfony,Php,Symfony,我刚刚完成了本教程: (包括“在会话中存储身份验证”) 它通过api密钥工作并授权用户,并在会话中成功存储身份验证 但是,我不知道如何通过该身份验证方法以编程方式对用户进行身份验证 我试过这样的方法: $user = new User( 'admin', null, ['ROLE_ADMIN'] ); $token = new PreAuthenticatedToken($user, null, "secured_area", $user->getRoles())
$user = new User(
'admin',
null,
['ROLE_ADMIN']
);
$token = new PreAuthenticatedToken($user, null, "secured_area", $user->getRoles());
$this->get("security.token_storage")->setToken($token);
$request = $this->get("request");
$event = new InteractiveLoginEvent($request, $token);
$this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
但它似乎使用了错误的身份验证提供者
有人能告诉我我做错了什么吗?(:
更新:
当通过上述方法进行身份验证时,会话内令牌存储在“默认”防火墙下
security:
providers:
api_key_user_provider:
id: api_key_user_provider
firewalls:
dev:
pattern: ^/(_(profiler|wdt|error)|css|images|js)/
security: false
secured_area:
pattern: ^/admin
simple_preauth:
authenticator: apikey_authenticator
default:
anonymous: ~
为什么不使用“安全区域”防火墙而使用“默认”?
如何正确强制“安全区域”使用?您的用户创建不正确,应使用用户管理器:
$userManager = $this->container->get('fos_user.user_manager');
// Create our user and set details
$user = $userManager->createUser();
$user->setUsername('username');
$user->setEmail('email@domain.com');
$user->setPlainPassword('password');
//$user->setPassword('encrypted_password');
$user->setEnabled(true);
$user->setRoles(array('ROLE_ADMIN'));
// Update the user
$userManager->updateUser($user, true);
然后,您可以使用以下内容对用户进行身份验证:
$token = new UsernamePasswordToken(
$user,
$user->getPassword(),
'secured_area',
$user->getRoles()
);
$this->get('security.context')->setToken($token);
$request->getSession()->set('_security_secured_area', serialize($token));
编辑:
你可以用一种更传统的方式,让我知道它是否有助于获得正确的防火墙
security:
providers:
api_key_user_provider:
id: api_key_user_provider
firewalls:
dev:
pattern: ^/(_(profiler|wdt|error)|css|images|js)/
security: false
secured_area:
pattern: ^/admin
simple_preauth:
authenticator: apikey_authenticator
default:
anonymous: ~
顺便说一句,我不确定您的symfony版本中是否已经有了此功能,但有一种更简单的方法:
或直接写入会话是解决问题的唯一方法?并且没有任何其他访问方式与当前防火墙不同?我不知道他们有任何其他的编程方式,这是人们通常使用的,这是您可以通过编程方式在SYMFONY2中进行身份验证的方式同时
安全性。上下文
已被弃用因此,请使用安全性。令牌存储
在此处检查更多信息:可能重复的