Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
belkod
Сообщения: 52
Зарегистрирован: 2014.01.04, 21:56

Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение belkod »

Приветствую!

Ветка dev.

При регистрации возникает интересная ситуация, этот кусок кода генерит ключ:

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

$security = Yii::$app->getSecurity();
$this->auth_key = $security->generateRandomKey();
 
дамп таблицы:

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

CREATE TABLE IF NOT EXISTS `tbl_users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL DEFAULT '',
  `username` varchar(150) NOT NULL DEFAULT '',
  `email` varchar(100) NOT NULL DEFAULT '',
  `password` varchar(100) NOT NULL DEFAULT '',
  `usertype` varchar(25) NOT NULL DEFAULT '',
  `block` tinyint(4) NOT NULL DEFAULT '0',
  `sendEmail` tinyint(4) DEFAULT '0',
  `registerDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `lastvisitDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `activation` varchar(100) NOT NULL DEFAULT '',
  `params` text NOT NULL,
  `lastResetTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Date of last password reset',
  `resetCount` int(11) NOT NULL DEFAULT '0' COMMENT 'Count of password resets since lastResetTime',
  `allowgid` tinyint(4) unsigned NOT NULL DEFAULT '0',
  `auth_key` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `usertype` (`usertype`),
  KEY `idx_name` (`name`),
  KEY `idx_block` (`block`),
  KEY `username` (`username`),
  KEY `email` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=177 ;
 
Ошибок в коде не происходит, т.к. данные записываются, и далее идет запись группы юзера.
Идет запись в таблицу:

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

INSERT INTO `tbl_users` (`allowgid`, `name`, `username`, `email`, `registerDate`, `password`, `block`, `auth_key`) VALUES (1, 'test', 'email@email.com', 'email@email.com', NOW(), '$2y$13$q.WUMYB.7K3YpiMTpvgMxO3FvZVr5/Qmh18TGtv/lfbFao8VIDv4m', 1, '3{pB«e*i.:X#1ZZcA')
 
так вот, ошибок не происходит, но поле 'auth_key' получается пустым или с несколькими начальными символами.

НО, если этот же запрос сделать через phpmyadmin, то данные пишутся ВСЕ!

Как-то я не понимаю, что происходит ....

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение zelenin »

подтверждаю

Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение Nafania »

Раньше generateRandomKey(), если мне память не изменяет, выдавал только ASCII символы, а теперь выдает все, втч и NULL.
Здесь два варианта решения, или используйте тип BINARY для хранения (или BYTEA в постгре) или вместо этого метода юзайте метод generateRandomString(), который выдает только ASCII.

Через phpmyadmin ессно все проходит, потому что в логе вы видите только печатаемые символы.

belkod
Сообщения: 52
Зарегистрирован: 2014.01.04, 21:56

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение belkod »

Я вот не понимаю такой упертости разработчиков в супер-пупер методах шифрации и криптографии. Да нафиг никому не сдались эти пароли. Если смогут спионерить БД, то смогут туда же внедрить и свою запись и перекинуть на нее связи.
С моей точки зрения все эти методы генерации ключей, шифрации паролей и прочей ерунды можно бы вынести в отдельный механизм. В принципе так оно щаз и есть. Но изначально в движке делать запупенную шифрацию... Тогда уж лучше бы набор классов, подключаемых через конфигурацию к примеру. нужно чего попроще - да плиз, юзайте md5(), нужно че круче, юзайте sha1 и т.д.

Кароче, сей затык кода я решил простым md5(), простой число-буквенный короткий код.

Рассмотрю другие варианты моего психоза )))

belkod
Сообщения: 52
Зарегистрирован: 2014.01.04, 21:56

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение belkod »

Nafania писал(а):Раньше generateRandomKey(), если мне память не изменяет, выдавал только ASCII символы, а теперь выдает все, втч и NULL.
+100500, в бета-версии движка был ASCII, и прекрасно все работало...

Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение Nafania »

belkod писал(а):Я вот не понимаю такой упертости разработчиков в супер-пупер методах шифрации и криптографии. Да нафиг никому не сдались эти пароли. Если смогут спионерить БД, то смогут туда же внедрить и свою запись и перекинуть на нее связи.
С моей точки зрения все эти методы генерации ключей, шифрации паролей и прочей ерунды можно бы вынести в отдельный механизм. В принципе так оно щаз и есть. Но изначально в движке делать запупенную шифрацию... Тогда уж лучше бы набор классов, подключаемых через конфигурацию к примеру. нужно чего попроще - да плиз, юзайте md5(), нужно че круче, юзайте sha1 и т.д.

Кароче, сей затык кода я решил простым md5(), простой число-буквенный короткий код.

Рассмотрю другие варианты моего психоза )))
Так вынесите, кто ж вам мешает. Напишите компонент и используйте его. Фреймворк в бете и какие-то вещи меняются. Используя бету вы принимаете то, что могут быть изменения, которые могут поломать ваш код.

belkod
Сообщения: 52
Зарегистрирован: 2014.01.04, 21:56

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение belkod »

Nafania писал(а):и вместо этого метода юзайте метод generateRandomString(), который выдает только ASCII.
Хотел его использовать, но решил все же спросить, реально такая шляпа или это мои кривые глюки.

Аватара пользователя
Akulenok
Сообщения: 434
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение Akulenok »

Согласен с замудростью авторизации, появилась необходимость сделать авторизацию через email и пароль, я уже мозг сломал как это сделать, подскажите.
Делаю опционально, с настройками. Пока придумал вот что,
в контроллере

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

if($userSettings['auth'] == 2)
            $model = new LoginForm(['scenario' => 'authEmail']);
        else
            $model = new LoginForm();
а что дальше в рулс, запутался в этих бесконечных методах, уже пришла мысль все сделать как раньше через мд5 с солью, но боюсь перестанет работать Rbac
ភាសាខ្មែរ Yii2 - это кайф!

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение zelenin »

в advanced app есть авторизация. в чем загвоздка?

Аватара пользователя
Akulenok
Сообщения: 434
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение Akulenok »

я с advanced и взял код, перенес в basic
изменил форму логина ( мне надо в зависимости от опции авторизировать или по логину или по емаилу

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

<?php if($userSettings['auth'] == 1) : ?>
                <?= $form->field($model, 'username') ?>
            <?php else : ?>
                <?= $form->field($model, 'email') ?>
            <?php endif; ?>
в контроллере

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

if($userSettings['auth'] == 2)
            $model = new LoginForm(['scenario' => 'authEmail']);
        else
            $model = new LoginForm();
в модели LoginForm

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

[['username', 'password'], 'required', 'on' => 'default'],
            ['rememberMe', 'boolean'],
            ['password', 'validatePassword'],

            ['email', 'email'],
            ['email', 'required', 'on' => 'authEmail'],
пытаюсь вардампить
public function validatePassword()
но ничего не происходит, вероятно ошибка валидации, ведь при авторизации через мыло нет username.
1. не знаю как вывести ошибки валидации на экран.
2. Как поступить, сделать 2 сценария или можно обойтись одним?
3. Писать кучу новых методов для авторизации по Email или есть способ более красиво это сделать?
4. Может разумнее сделать еще одну модель LoginByEmail ?
ភាសាខ្មែរ Yii2 - это кайф!

Аватара пользователя
Akulenok
Сообщения: 434
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение Akulenok »

Все вопрос снят, сделал через новую модель
ភាសាខ្មែរ Yii2 - это кайф!

Аватара пользователя
yiijeka
Сообщения: 3086
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Проблемы с Yii::$app->getSecurity()->generateRandomKey()

Сообщение yiijeka »

generateRandomKey() лучше сменить на $this->auth_key = \Yii::$app->security->generateRandomString();

у меня при RESTAPI возникли из-за этого проблемы с БД тоже глюк был.

PS УПС просмотрел -изменили это по умолчанию тоже

Ответить