Tho*_*s K 15 php migration authentication expressionengine symfony
我正在从expressionengine转移到symfony2,我正在寻找迁移用户密码的最佳方法.目标是让旧版用户使用现有凭据登录,而新用户的密码以默认方式创建.
我已经查看了自定义身份验证提供程序和自定义用户提供程序,并考虑是否为遗留用户创建单独的实体,但我不知道实现上述目标的最佳方式/设计是什么.
供参考:
任何人都可以建议我解决方案?
Tho*_*s K 23
弄清楚了!
创建自定义编码器并使用FOSAdvancedEncoder包选择适当的编码器.
1.创建编码器
<?php
namespace Acme\MyBundle\Security\Encoder;
use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;
class LegacyEncoder implements PasswordEncoderInterface {
public function encodePassword($raw, $salt)
{
// Your Custom encoder logic
return $something
}
public function isPasswordValid($encoded, $raw, $salt)
{
return $encoded === $this->encodePassword($raw, $salt);
}
}
Run Code Online (Sandbox Code Playgroud)
2.将编码器注册为服务
services:
acme.legacy_encoder:
class: Acme\MyBundle\Security\Encoder\LegacyEncoder
Run Code Online (Sandbox Code Playgroud)
3.安装FOSAdvancedEncoderBundle
请看这里:https://github.com/friendsofsymfony/FOSAdvancedEncoderBundle/blob/master/Resources/doc/index.md
4.配置编码器
在app/config.yml:
fos_advanced_encoder:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
legacy_encoder:
id: acme.legacy_encoder
Run Code Online (Sandbox Code Playgroud)
5.在用户类中实现编码器感知接口
use FOS\AdvancedEncoderBundle\Security\Encoder\EncoderAwareInterface;
use FOS\UserBundle\Entity\User as BaseUser;
class User extends BaseUser implements EncoderAwareInterface {
...
public function getEncoderName() {
if($this->islegacy()) {
return "legacy_encoder";
}
return NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
如果用户是旧用户,请记住添加一个布尔字段来管理.
而已.