2012-01-22 2 views
2

Есть ли способ заставить Zend_Auth принимать идентификаторы, зависящие от регистра (то есть имена пользователей)? Zend_Auth, похоже, предоставляет способ добавить специальное обращение в поле учетных данных, но не в поле идентификации.Как сделать регистр Zend_Auth нечувствительным к имени пользователя?

PS: Я использую Zend_Auth_Adapter_DbTable, который указывает на таблицу Postgres.

+0

Привет, @Alex N. Я сталкиваюсь с тем же вопросом, вы можете увидеть мой вопрос https://stackoverflow.com/questions/47300930/how-to-make-username-case-insensitive-in-zf2, поскольку вы уже сталкиваетесь с этой проблемой –

ответ

3

Что-то, как это должно работать:

 

$authAdapter = new Zend_Auth_Adapter_DbTable(
     $dbAdapter, 
     'usertable', 
     new Zend_Db_Expr('LOWER(username)'), 
     'password' 
); 

$authAdapter 
    ->setIdentity(strtolower($this->_getParam('username')) 
    ->setCredential($this->_getParam('password')); 
 

И обязательно использовать один из * _ci сортировки в базе данных для поля имени пользователя (Сi = регистронезависимого). Надеюсь, это поможет

+1

+1. И было бы неплохо обернуть это в пользовательский auth-адаптер, расширяющий 'Zend_Auth_Adapter_DbTable' с более простым конструктором' public function __construct ($ dbAdapter) 'и переопределенным методом' setIdentity() '. См. Http://pastebin.com/a6KnhKw8. –

+0

Привет @David я сталкиваюсь с той же проблемой, вы можете увидеть мой вопрос https://stackoverflow.com/questions/47300930/how-to-make-username-case-insensitive-in-zf2 любая помощь заметна –

0

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

+0

Hi @ drew010 вы можете видеть мой вопрос https://stackoverflow.com/questions/47300930/how-to-make-username-case-insensitive-in-zf2 любая помощь заметна –

 Смежные вопросы

  • Нет связанных вопросов^_^