Я перехожу от expressionengine к symfony2, и я ищу лучший способ переноса пользовательских паролей. Цель состоит в том, чтобы позволить устаревшим пользователям войти в систему с существующими учетными данными, а пароли для новых пользователей создаются по умолчанию.
Я посмотрел на пользовательских поставщиков проверки подлинности и пользовательских поставщиков пользователей и подумал о том, чтобы создать или не создать отдельный объект для устаревших пользователей, но я не знаю, какой был бы лучший способ / дизайн для достижения вышеуказанного.
FYI:
Может ли кто-нибудь посоветовать мне решение?
Догадаться!
Создайте собственный кодер и используйте пакет 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.
Важные вещи для запоминания: