sfDoctrineGuardPlugin: войдите в систему с помощью электронной почты


Я создаю веб-приложение с помощью symgony1.4 и doctrine1.2, и я хочу использовать sfDoctrineGuardPlugin, но у меня небольшая проблема.

sfDoctrineGuardPlugin создан для аутентификации по имени пользователя, но мне нужно изменить его, чтобы запросить электронное письмо.

Есть идеи, как это сделать?

Author: alcuadrado, 2010-03-10

4 answers

Http://bluehorn.co.nz/2009/06/12/symfony-12-propel-and-sfguardplugin-email-login/

Это было написано для propel, но, вероятно, легко применимо к доктрине.

 5
Author: Maerlyn, 2010-03-10 21:58:53

Если я правильно понял ваш вопрос, вы хотите разрешить вход с помощью электронной почты.

SfDoctrineGuardPlugin поддерживает вход с использованием электронной почты или имени пользователя, но в версии 5.0.0 не работает, согласно этому билету:

Http://trac.symfony-project.org/ticket/8919

Там есть патч. Примените исправление и создайте запись в своем приложении.yml, установив для параметра allow_login_with_email значение true:

all:
  sf_guard_plugin:
    allow_login_with_email: true

Это то, что тебе нужно?

 6
Author: oznek, 2010-11-08 05:29:52

Как насчет сохранения sfDoctrineGuard как есть, используя существующее поле имени пользователя, но сохраняя в нем электронные письма. Затем ваши пользователи войдут в систему со своими электронными письмами. Длина поля по умолчанию - VARCHAR(128), что достаточно для любого электронного письма. Если я правильно помню, единственное, что вам нужно будет настроить, - это метка формы для регистрации sfguard, входа в систему и т. Д. (Где бы вы ее ни отображали). Вы бы просто сказали "Введите адрес электронной почты здесь" вместо "Введите имя пользователя здесь".

Единственным недостатком является то, что вы потеряйте "имя пользователя", но вы всегда можете поместить его в отдельный профиль, связанный с sfGuardUser.

Если вам не нравится такой подход, вы всегда можете напрямую настроить код sfDoctrineGuardPlugin, но это, вероятно, вызовет некоторую головную боль.

 4
Author: Tom, 2010-03-10 19:05:20

Я собираюсь ответить на этот вопрос на случай, если кто-то еще прочитает этот вопрос в поисках помощи.

Как указал ознек, вы должны использовать параметр "allow_login_with_email".

Однако в плагине есть ошибка (по крайней мере, в версии 5.0.0), которая мешает ему работать. Вы должны изменить этот файл: /sfDoctrineGuardPlugin/lib/validator/sfGuardValidatorUser.class.php строка 44 замените это:

$user = $this->getTable()->retrieveByUsername($username);

С помощью этого:

$user = $this->getTable()->$method($username);

(переменная "$method" определена несколькими строками выше, но никогда не использовалась)

 2
Author: Improve-in, 2012-08-31 07:30:46