我用symfony 2.4迁移了一个旧的用户系统,我想大量使用 FOSUserBundle 和 encodePassword 函数来使用用户的某些属性(例如,它的 id),但我找不到将$myUserObject插入这个 MyPasswordEncoder 类的方法。
namespace TykaynMeluzineBundleServices;
class MyPasswordEncoder extends SymfonyComponentSecurityCoreEncoderBasePasswordEncoder
{
public function encodePassword($raw, $salt, **$myUserObject** )
{
return sha1('blahblah' . $raw . 'blehbleh'. $salt. $myUserObject->id ) ;
}
public function isPasswordValid($encoded, $raw, $salt)
{
return $this->comparePasswords($encoded, $this->encodePassword($raw, $salt));
}
}
找到了一些不错的方法:
在我的用户包中创建自定义密码编码器,以扩展 FOSuserbundle。
namespace SdzUserBundleSecurityEncoder;
use SymfonyComponentSecurityCoreEncoderBasePasswordEncoder;
class CustomEncoder extends BasePasswordEncoder {
public function encodePassword($raw, $salt) {
// do doctrine stuff to get the user info
return $hashed;
}
public function isPasswordValid($encoded, $raw, $salt) {
return $this->comparePasswords($encoded, $this->encodePassword($raw, $salt));
}
}
将编码器注册为 MyUserbundle 的服务,为其注入原则服务。
services:
sdz_user.custom_encoder:
class: "SdzUserBundleSecurityEncoderCustomEncoder"
arguments: [ @Doctrine]
配置全局安全性.yml
security:
encoders:
# encodeur de password selon l'ancienne façon
FOSUserBundleModelUserInterface:
id: sdz_user.custom_encoder