我正在尝试对Symfony 2生成的Mysql数据库中的用户进行身份验证。在Security.yml
中,我有这个:
security:
encoders:
"FOS'UserBundle'Model'UserInterface": sha512
在用户表中有两个字段:Salt
和Password
。
所有密码都是这样的:
YqkYUe0pV/TAw12aG2UcBax0hnJNeHez/S0uBGbnDDBxWD2Yeetqm4DfMn/8WKILIeRpM7ncTJ9coYOiNPGeOA==
我正在开发一个使用PHP对用户进行身份验证的Web服务。我不知道我必须使用哪些函数来比较纯密码和加密密码?
您必须从容器中获取密码编码器工厂。
你可以这样做:
$factory = $container->get('security.encoder_factory'); //$container refers to your container, it can be also $this->container
$user = new Your'Bundle'Entity'User();
$encoder = $factory->getEncoder($user);
$encodedPassword = $encoder->encodePassword($nonEncodedPassword, $user->getSalt());
这应该足够了。当然,您可以"手动"将第二个encodePassword
参数设置为用于编码所有pasword的salt。它通常在用户实现类中定义,这就是为什么我们在这里给出一个实体实例化对象。
这是处理Symfony2 中sha512加密的类
https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Core/Encoder/MessageDigestPasswordEncoder.php