Перенос устаревших пользователей на symfony2

Я перехожу от expressionengine к symfony2, и я ищу лучший способ переноса пользовательских паролей. Цель состоит в том, чтобы позволить устаревшим пользователям войти в систему с существующими учетными данными, а пароли для новых пользователей создаются по умолчанию.

Я просмотрел пользовательские поставщики проверки подлинности и пользовательские поставщики пользователей и подумал о том, чтобы создать отдельный объект для устаревших пользователей, но я не знаю, какой был бы лучший способ/дизайн для достижения вышеуказанного.

FYI:

  • Насколько я вижу, expressionengine просто шифрует пароль используя sha1 и что он.
  • В настоящее время я использую FOSUserBundle.

Может ли кто-нибудь посоветовать мне решение?

Ответы

Ответ 1

Выяснилось!

Создайте собственный кодировщик и используйте пакет 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;
  }

}

Не забудьте добавить логическое поле для администрирования, если пользователь является устаревшим пользователем или нет.

Что это.

Ответ 2

Может быть, поток экспорта членов из ExpressionEngine в Wordpress поможет вам.

Я не вижу никаких трудностей, кроме экспорта результатов пользовательского запроса в структуру FOSUserBundle.

Важные вещи для запоминания:

  • Как Derek Hogue в значительной степени указывает на этот поток, пользователям, скорее всего, придется reset их пароли
  • Вам нужно будет понять обе структуры действительно хорошо, чтобы правильно импортировать данные