我必须从密码存储在 MD5 中的旧数据库中迁移用户,而在使用 SHA512 的新应用程序中。
我的目的是新应用程序中首次登录的旧用户必须更改密码,但这意味着您可以使用 MD5 中的密码从数据库加载这些用户。
如何使用 Symfony 2.3.3 + FOSUserBundle 做到这一点?
我必须从密码存储在 MD5 中的旧数据库中迁移用户,而在使用 SHA512 的新应用程序中。
我的目的是新应用程序中首次登录的旧用户必须更改密码,但这意味着您可以使用 MD5 中的密码从数据库加载这些用户。
如何使用 Symfony 2.3.3 + FOSUserBundle 做到这一点?
您可以创建自定义密码编码器。例如:
security:
encoders:
FOS\UserBundle\Model\UserInterface: { id: my_password_encoder }
然后注册该服务:
services:
my_password_encoder:
class: MyProject\DefaultBundle\Security\PasswordEncoder
并使用以下内容创建服务:
use Symfony\Component\Security\Core\Encoder\BasePasswordEncoder;
class PasswordEncoder extends BasePasswordEncoder
{
public function encodePassword($raw, $salt)
{
return md5($raw);
}
public function isPasswordValid($encoded, $raw, $salt)
{
return $this->comparePasswords($encoded, $this->encodePassword($raw, $salt));
}
}
您可以在用户表中添加一个字段,说明每个用户的编码是 md5 还是 sha512。
只要您在 security.yml 文件中将编码器设置为 md5 而不是 sha512,您应该能够让用户登录。
此外,您可能会使用:
FOS\UserBundle\Doctrine\UserManager;
Symfony\Component\Security\Core\Encoder\EncoderFactory;
加载用户。