15

私はexpressionengineからsymfony2に移行しており、ユーザーパスワードを移行するための最良の方法を探しています。目標は、レガシーユーザーが既存の資格情報を使用してログインできるようにする一方で、新しいユーザーのパスワードはデフォルトの方法で作成されるようにすることです。

カスタム認証プロバイダーとカスタムユーザープロバイダーを調べて、レガシーユーザー用に別のエンティティを作成するかどうかを考えましたが、上記を実現するための最良の方法/設計が何であるかわかりません。

ご参考までに:

  • 私が見る限り、expressionengineはsha1を使用してパスワードを暗号化するだけで、それだけです。
  • 現在、FOSUserBundleを使用しています。

誰かが解決策について私にアドバイスできますか?

4

2 に答える 2

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);
        }

    }

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;
  }

}

ユーザーがレガシー ユーザーであるかどうかを管理するために、必ずブール フィールドを追加してください。

それでおしまい。

于 2012-08-22T14:36:49.447 に答える
-2

ExpressionEngine から Wordpress へのメンバーのエクスポートに関するスレッドが役立つかもしれません。

カスタム クエリの結果を FOSUserBundle 構造にエクスポートする以外に問題はありません。

覚えておくべき重要事項:

  • Derek Hogueがそのスレッドで大いに指摘しているように、ユーザーはおそらくパスワードをリセットする必要があります
  • データを正しくインポートするには、両方の構造をよく理解する必要があります
于 2012-08-22T12:32:25.443 に答える