我正在使用Symfony3和FOSUserBundle,并使用以下代码启用成员实体(来自迁移的数据库),使用我们的类&#34以通常的密码登录; clubEncoder"而不是Symfony的默认bcrypt。 " clubEncoder"记录成员的工作正常(如下所示)。理想情况下,我希望能够在后台执行以下操作:
我的问题:
我假设我需要更改security.yml
以指定两个编码器。但是,我读过的文章只描述了使用不同的编码器来处理不同的用户子集 - 而我想在所有用户身上试用它们......这仍然可以吗?
要重新生成数据库中的密码哈希,我假设需要更改控制器,但是因为我使用FOSUserBundle我没有自定义的路由。这是想要添加代码的错误位置吗?
**以下是我目前稳定并且正在为第2步工作的代码:
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
fos_user:
db_driver: orm
firewall_name: main
user_class: AppBundle\Entity\Member
security:
encoders:
AppBundle\Entity\Member:
id: club.member_encoder
// AppBundle\Entity\Member:
// id: bcrypt
services:
club.member_encoder:
class: AppBundle\Service\clubEncoder
namespace AppBundle\Service;
use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;
class clubEncoder extends \Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder implements PasswordEncoderInterface
{
function __construct($cost=13)
{
parent::__construct($cost);
}
function isPasswordValid($encoded, $raw,$salt)
{
if (parent::isPasswordValid($cost=13, $encoded,$raw,$salt)) return true ;
else if ($this->comparePasswords($encoded, sha1("3^1nD".$raw."Hx&&%"))) {
// ADD SOMETHING HERE TO RE-HASH THE PASSWORD TO BCRYPT???????????????????
return !$this->isPasswordTooLong($raw) &&
$this->comparePasswords($encoded, sha1("ThisIsSaltA".$raw."ThisIsSaltB"));
}
}
}