Предложение: изменить метод findByUsername в common\models\User для yii2-app-advanced

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
MihaOo
Сообщения: 6
Зарегистрирован: 2016.07.13, 17:53

Предложение: изменить метод findByUsername в common\models\User для yii2-app-advanced

Сообщение MihaOo »

Сейчас в yii2-app-advanced в файле common\models\User.php есть метод:

Код: Выделить всё

public static function findByUsername($username) {
    return static::findOne(['username' => $username, 'status' => self::STATUS_ACTIVE]);
}
На моей локальной машине при логине как Admin он выдергивает из таблицы user (которая создана миграцией) с кодировкой utf8_unicode_ci пользователя Admin или пользователя admin (зависит от сортировки), хотя по идее это должны быть два разных пользователя.
Я нашел такое решение проблемы:

Код: Выделить всё

public static function findByUsername($username) {
    return static::find()
        ->where('BINARY [[username]]=:username', [':username' => $username])
        ->andWhere(['status' => self::STATUS_ACTIVE])
        ->one();
}
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Предложение: изменить метод findByUsername в common\models\User для yii2-app-advanced

Сообщение Loveorigami »

по идее - это должен быть один и тот же логин
Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

Re: Предложение: изменить метод findByUsername в common\models\User для yii2-app-advanced

Сообщение mitaichik »

Вы что-то путаете, почитайте про идентификацию и аутентификацию. Идентификатор (логин) должен быть регистронезависимым, в отличии от параметра аутентификации (пароль). Это общепринятая практика. Или по вашему user@example.com и USER@example.com - это разные емейлы?
MihaOo
Сообщения: 6
Зарегистрирован: 2016.07.13, 17:53

Re: Предложение: изменить метод findByUsername в common\models\User для yii2-app-advanced

Сообщение MihaOo »

Я не исключаю того, что я что-то путаю, но причем тут имэйлы? Почитайте это https://habrahabr.ru/post/274985/. В любом случае я считаю что, к примеру, aDmin и AdMIn это абсолютно разные логины. Возможно это не станет фиксом, это не мне решать, но данный подход имеет место быть.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Предложение: изменить метод findByUsername в common\models\User для yii2-app-advanced

Сообщение zelenin »

MihaOo писал(а):Сейчас в yii2-app-advanced в файле common\models\User.php есть метод:

Код: Выделить всё

public static function findByUsername($username) {
    return static::findOne(['username' => $username, 'status' => self::STATUS_ACTIVE]);
} 
На моей локальной машине при логине как Admin он выдергивает из таблицы user (которая создана миграцией) с кодировкой utf8_unicode_ci пользователя Admin или пользователя admin (зависит от сортировки), хотя по идее это должны быть два разных пользователя.
Я нашел такое решение проблемы:

Код: Выделить всё

public static function findByUsername($username) {
    return static::find()
        ->where('BINARY [[username]]=:username', [':username' => $username])
        ->andWhere(['status' => self::STATUS_ACTIVE])
        ->one();
} 
в каких БД, поддерживаемых yii, это будет работать?
Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

Re: Предложение: изменить метод findByUsername в common\models\User для yii2-app-advanced

Сообщение mitaichik »

MihaOo писал(а):Я не исключаю того, что я что-то путаю, но причем тут имэйлы? Почитайте это https://habrahabr.ru/post/274985/. В любом случае я считаю что, к примеру, aDmin и AdMIn это абсолютно разные логины. Возможно это не станет фиксом, это не мне решать, но данный подход имеет место быть.
Email при том, что это такой же идентификатор как логин, или ваше ФИО. В приведенной статье я не нашел что-либо про регистрозависимость. И да, стандарт email ов не обязывает их делать регистронезависимыми, но как я уже говорил - это общепринятая практика, и не только в ИТ: в вашем пасспорте ФИО указанно заглавными буквами (по крайней мере в моем). Но разве банк откажет вам, если напишете его строчными буквами? Думаете суд примет это во внимание, если в расписке имя написано не в том же регистре что и в паспорте?

Ну а вообще - это особенность сравнения строк MySQL, не yii. Как вы видете - в коде никаких манипуляци с регистром нет.
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Предложение: изменить метод findByUsername в common\models\User для yii2-app-advanced

Сообщение SiZE »

MihaOo писал(а):Сейчас в yii2-app-advanced в файле common\models\User.php есть метод
вы путаете фреймворк и цмс.
Ответить