我从expressionengine移动到Symfony2的,我正在寻找迁移的用户密码的最佳方式。 我们的目标是让传统用户与他们的现有凭据登录,而对于新用户的密码被创建的默认方式。
我看过自定义身份验证提供者和自定义用户提供,想着用是否来为旧有用户的一个单独的实体,但我不知道什么了是最好的方式/设计实现上述。
供参考:
- 据我所看到的,只是expressionengine使用加密SHA1密码,仅此而已。
- 我目前使用FOSUserBundle。
任何人都可以建议我一个解决方案?
我从expressionengine移动到Symfony2的,我正在寻找迁移的用户密码的最佳方式。 我们的目标是让传统用户与他们的现有凭据登录,而对于新用户的密码被创建的默认方式。
我看过自定义身份验证提供者和自定义用户提供,想着用是否来为旧有用户的一个单独的实体,但我不知道什么了是最好的方式/设计实现上述。
供参考:
任何人都可以建议我一个解决方案?
弄清楚了!
创建自定义编码器和使用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);
}
}
2.注册编码器作为服务
services:
acme.legacy_encoder:
class: Acme\MyBundle\Security\Encoder\LegacyEncoder
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
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;
}
}
记得要加一个布尔字段来管理,如果用户是一个传统用户或没有。
而已。
也许有关线程从ExpressionEngine出口成员的WordPress会帮你。
我没有看到比从自定义查询到FOSUserBundle结构将结果导出以外的任何困难。
重要的事情要记住: