簡體   English   中英

將舊用戶遷移到symfony2

[英]Migrating legacy users to symfony2

我正在從expressionengine轉移到symfony2,我正在尋找遷移用戶密碼的最佳方法。 目標是讓舊版用戶使用現有憑據登錄,而新用戶的密碼以默認方式創建。

我已經查看了自定義身份驗證提供程序和自定義用戶提供程序,並考慮是否為遺留用戶創建單獨的實體,但我不知道實現上述目標的最佳方式/設計是什么。

供參考:

  • 據我所知,expressionengine只是使用sha1加密密碼,就是這樣。
  • 我目前正在使用FOSUserBundle。

任何人都可以建議我解決方案?

弄清楚了!

創建自定義編碼器並使用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結構之外,我沒有看到任何其他困難。

要記住的重要事項:

  • 正如Derek Hogue在該主題中指出的那樣,用戶很可能不得不重置密碼
  • 為了正確導入數據,您必須非常了解這兩種結構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM