sfDoctrineGuardPlugin: войдите с электронной почтой - PullRequest
5 голосов
/ 10 марта 2010

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

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

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

Ответы [ 4 ]

6 голосов
/ 08 ноября 2010

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

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

http://trac.symfony -project.org / билет / 8919

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

all:
  sf_guard_plugin:
    allow_login_with_email: true

Это то, что вам нужно?

5 голосов
/ 11 марта 2010

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

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

4 голосов
/ 10 марта 2010

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

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

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

2 голосов
/ 31 августа 2012

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

Как указал Ознек, вы должны использовать параметр 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" определена несколькими строками выше, но никогда не используется)

...