DbHelp.ru
Маленький Yii блог
Комментарии
Гость: Подробная i188 инструкция. j236 Бланк на закрытие ип 2017 пре...
Гость: На сегодняшний день загородный дом по уровню комфорта ...
Гость: Я, вам завидую. Ваш блог намного лучше по содержанию и д...
Гость: Подробная i625 инструкция. p957 Бланк для закрытие ип 2017 пр...
Гость: смотреть порно зоофилы курительные смеси спайс зоо ...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Урок 6 : Регистрация и авторизация. Часть 2

Рубрика: Создаем блог вместе

Оцените эту статью:

Рейтинг: 0.00 (0)
2 Июл. 2009
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут возникнуть ошибки из-за несовместимости. Обычно ответы на все вопросы работы на 1.1.х были описаны в комментариях ниже статьи.

Продолжение...

---

Я надеюсь вы уже знакомы с прошлой частью урока, и настроились к познанию нового материала :) Давайте немного вrспомним о том что было в прошлой части и что у нас уже готово:

  • форма поле должно проверять правиломрегистрации
  • обработка формы. валидация полей (данных). сохранение данных
  • модель, контроллер и пару отображений

В этой части урока мы полностью закончим с авторизацией и регистрацией и сможем приступить к более серьезным (и интересным) вещам :)

Работаем с экшинсом

В прошлой части урока мы создали отдельный экшинс для регистрации, давайте сделаем нечто похожее и для авторизации. Открываем наш контроллер UserController.php и находим:

    /**
     * Метод входа на сайт
     *
     * Метод в котором мы выводим форму авторизации
     * и обрабатываем её на правильность.
     */
    public function actionLogin()
    {
    }   

И заменяем на :
    /**
     * Метод входа на сайт
     *
     * Метод в котором мы выводим форму авторизации
     * и обрабатываем её на правильность.
     */
    public function actionLogin()
    {
        $form = new User();
       
        // Проверяем является ли пользователь гостем
        // ведь если он уже зарегистрирован - формы он не должен увидеть.
        if (!Yii::app()->user->isGuest) {
            throw new CException('Вы уже зарегистрированы!');
        } else {
            if (!empty($_POST['User'])) {
                $form->attributes = $_POST['User'];
                $form->verifyCode = $_POST['User']['verifyCode'];

                    // Проверяем правильность данных
                    if($form->validate('login')) {
                        // если всё ок - кидаем на главную страницу
                        $this->redirect(Yii::app()->homeUrl);
                    }
            }
            $this->render('login', array('form' => $form));
        }
    }   

Форма

Конструкция очень похожа на actionRegistration() поэтому я не делал сильно много комментариев.

Как вы уже поняли по коду - форма у нас будет находиться в файле login. Поэтому заходим views/user/ и создаем файл login.php:

<h1>Авторизация</h1>

<?=CHtml::form(); ?>
<?=CHtml::errorSummary($form); ?><br>

    <table id="form2" border="0" width="400" cellpadding="10" cellspacing="10">
        <tr>
            <td width="150"><?=CHtml::activeLabel($form, 'login'); ?></td>
            <td><?=CHtml::activeTextField($form, 'login') ?></td>
        </tr>
        <tr>
            <td><?=CHtml::activeLabel($form, 'passwd'); ?></td>
            <td><?=CHtml::activePasswordField($form, 'passwd') ?></td>
        <tr>
        <tr>
            <td><?php $this->widget('CCaptcha', array('buttonLabel' => '<br>[новый код]')); ?></td>
            <td><?=CHtml::activeTextField($form,'verifyCode'); ?></td>
        </tr>
        <tr>
            <td></td>
            <td><?=CHtml::submitButton('Войти', array('id' => "submit")); ?></td>
        </tr>
    </table>

<?=CHtml::endForm(); ?>

Почти аналогичная форма как и у регистрации (только без поля повтора пароля). Хотел бы обратить внимание что на форме авторизации я оставил поле капчи (для того чтобы боты не авторизировались самостоятельно).

Теперь заходим на страницу localhost/user/login/ и видим красивую формочку :)
Можете даже попробовать ввести в неё какие то не правильные данные (указать неверный код капчи, использовать короткий логин/пароль) и убедиться что наши правила работают :)

Если вы введете верные данные - вас просто переведет на главную страницу. Механизм сохранения мы еще не писали, поэтому это нормально.

UserIdentity

Как вы понимаете сам процесс аутентификации уже был вложен в Yii и от нас требуется лишь наследовать класс CUserIdentity и пере определить метод authenticate под свои нужды.

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

В authenticate мы проверим совпадают ли введённые данные (логин/пароль) с тем что у нас есть в базе данных. Заходим в protected/ и создаем там папку components, а в ней файл UserIdentity.php:

 class UserIdentity extends CUserIdentity
{
    private $_id;
    public function authenticate()
    {
        // Есть ли указанный пользователь в базе данных
        $record=User::model()->findByAttributes(array('login'=>$this->username));
        if($record===null)
            // Если нету - сохраняем в errorCode ошибку.
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        else if($record->passwd!==$this->password)
            // Проверяем совпадает ли введенный пароль с тем что у нас в базе
            // Если не совпадает - сохраняем в errorCode ошибку.
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        else
        {
            // Если все действий выше успешно пройдены - значит
            // пользователь действительно существует и пароль был
            // указан верно.
            $this->_id=$record->id;
            // В errorCode сохраняем что ошибок нет
            $this->errorCode=self::ERROR_NONE;
        }
        return !$this->errorCode;
    }
 
    public function getId()
    {
        return $this->_id;
    }
}

Давайте разберем что мы написали выше.

  1. Мы создали класс UserIdentity с наследованием от CUserIdentity
  2. Пере определили метод authenticate() в которой сделали проверку на наличие такого логина в базе, а после этого проверка на совпадение пароля.
  3. Метод возвращает у нас errorCode. Если значение "ERROR_NONE" - значит ошибок нету.

Модель

Теперь нам надо в моделе создать специально правило для того что бы сразу проверять введенные логин/пароль нашим методом.

Открываем protected/models/User.php и в метод rules добавляем еще одно правило:

array('passwd', 'authenticate', 'on' => 'login'),

В конечном итоге rules у нас должны выглядеть следующим образом:

    /**
     * Правила валидации
     */
    public function rules()
    {
        return array(
            // логин, пароль не должны быть больше 128-и символов, и меньше трёх
            array('login, passwd', 'length', 'max'=>128, 'min' => 3),
            // логин, пароль не должны быть пустыми
            array('login, passwd', 'required'),
            // для сценария registration поле passwd должно совпадать с полем passwd2
            array('passwd', 'compare', 'compareAttribute'=>'passwd2', 'on'=>'registration'),
            // правило для проверки капчи что капча совпадает с тем что ввел пользователь
            array('verifyCode', 'captcha', 'allowEmpty'=>!extension_loaded('gd')),
            // проверка пароля нашим методом authenticate
            array('passwd', 'authenticate', 'on' => 'login'),
           array('login', 'match', 'pattern' => '/^[A-Za-z0-9А-Яа-я\s,]+$/u','message' => 'Логин содержит недопустимые символы.'),
       );
    }

Как вы уже помните - в массиве первым элементом я задал поле, которое должно быть проверенно правилом, а во втором параметре указал как должен называться метод для проверки. Теперь давайте создадим authenticate нашей модели.

Хочу заметить что в данном случае речь идет не про метод authenticate который мы создали в UserIdentity. В данном случае я просто использую точно такое же имя, но речь уже идет про метод authenticate который мы сейчас создадим в User.php

И так, ниже в этом же файле добавляем новый метод:

    /**
     * Собственное правило для проверки
     * Данный метод является связующем звеном с UserIdentity
     *
     * @param $attribute
     * @param $params
     */
    public function authenticate($attribute,$params)
    {
        // Проверяем были ли ошибки в других правилах валидации.
        // если были - нет смысла выполнять проверку
        if(!$this->hasErrors())
        {
            // Создаем экземпляр класса UserIdentity
            // и передаем в его конструктор введенный пользователем логин и пароль (с формы)
            $identity= new UserIdentity($this->login, $this->passwd);
            // Выполняем метод authenticate (о котором мы с вами говорили пару абзацев назад)
            // Он у нас проверяет существует ли такой пользователь и возвращает ошибку (если она есть)
            // в $identity->errorCode
            $identity->authenticate();
               
                // Теперь мы проверяем есть ли ошибка..   
                switch($identity->errorCode)
                {
                    // Если ошибки нету...
                    case UserIdentity::ERROR_NONE: {
                        // Данная строчка говорит что надо выдать пользователю
                        // соответствующие куки о том что он зарегистрирован, срок действий
                        // у которых указан вторым параметром.
                        Yii::app()->user->login($identity, 0);
                        break;
                    }
                    case UserIdentity::ERROR_USERNAME_INVALID: {
                        // Если логин был указан наверно - создаем ошибку
                        $this->addError('login','Пользователь не существует!');
                        break;
                    }
                    case UserIdentity::ERROR_PASSWORD_INVALID: {
                        // Если пароль был указан наверно - создаем ошибку
                        $this->addError('passwd','Вы указали неверный пароль!');
                        break;
                    }
                }
        }
    }

Я надеюсь логика работы вам в принципе понятна. Т.е. мы с вами написали правило (rules) которое проверяет поле passwd нашим методом authenticate. В нем мы обращаемся к классу UserIdentity и проверяем существует ли такой пользователь с таким паролем. Если все хорошо - методом login проводим "вход" пользователя.

Выход

Когда со "входом" на сайт мы разобрались, давайте сделаем "выход (log out)".
Для этого мы уже написали каркас экшинса в контроллере, который сейчас мы дополним.

Открываем protected/controllers/UserController.php и вместо:

    /**
     * Метод выхода с сайта
     *
     * Данный метод описывает в себе выход пользователя с сайта
     * Т.е. кнопочка "выход"
     */
    public function actionLogout()
    {
    }

делаем :

    /**
     * Метод выхода с сайта
     *
     * Данный метод описывает в себе выход пользователя с сайта
     * Т.е. кнопочка "выход"
     */
    public function actionLogout()
    {
        // Выходим
        Yii::app()->user->logout();
        // Перезагружаем страницу
        $this->redirect(Yii::app()->user->returnUrl);
    }

Всё достаточно просто.

Меню

Теперь что бы увидеть как это все работает - думаю есть смысл создать просто меню:

    <a href="<?=Yii::app()->createUrl("post/index");?>">Главная</a>
    <?php if (Yii::app()->user->isGuest): ?>
        <a href="<?=Yii::app()->createUrl("user/registration/");?>">Регистрация</a>
        <a href="<?=Yii::app()->createUrl("user/login/");?>">Вход</a>
    <?php else: ?>
        <a href="<?=Yii::app()->createUrl("user/logout/");?>">Выход (<?=Yii::app()->user->name?>)</a>
    <?php endif; ?>

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

Я не хочу сильно мудрить с выносом меню в отдельный файл и тп, поэтому мы просто добавим его в наш layouts. Открываем protected/views/layouts/main.php и добавляем в него код нашего меню:

<html>
<head>
    <title><?php echo $this->pageTitle; ?></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="language" content="ru" />
    <meta name="robots" content="all" />
</head>
<body>

    <a href="<?=Yii::app()->createUrl("post/index/");?>">Главная</a>
    <?php if (Yii::app()->user->isGuest): ?>
        <a href="<?=Yii::app()->createUrl("user/registration/");?>">Регистрация</a>
        <a href="<?=Yii::app()->createUrl("user/login/");?>">Вход</a>
    <?php else: ?>
        <a href="<?=Yii::app()->createUrl("user/logout/");?>">Выход (<?=Yii::app()->user->name?>)</a>
    <?php endif; ?>
   
    <?php echo $content; ?>
</html>

Конец

Теперь всё работает. Заходите на localhost и смотрите сами :)

Исходники:



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

  1. В данном переводе раскрыта идея как закрыть сайт от гостей. т.е. пользователи должны войти в систему прежде чем смогут увидеть ... "Закрываем сайт от лишних глаз"

  2. Разработчики в очередной раз не перестают нас радовать новой версией замечательного фреймворка. Я был очень рад когда после выходных, выйдя ... "Версия 1.0.7"

  3. ... "Привет Yii 1.1.9"

[guest] Гость

Было сказано: Четверг, 02 Июль 2009

Большое спасибо!

[guest] Maxx

Было сказано: Четверг, 02 Июль 2009

Спасибо!

[guest] Радик

Было сказано: Четверг, 02 Июль 2009

Спасибо за статью

[guest] 32

Было сказано: Четверг, 02 Июль 2009

Сенк

[guest] Гость

Было сказано: Четверг, 02 Июль 2009

Спасибо

Виталий

Было сказано: Четверг, 02 Июль 2009

На странице регистрации ввожу имя и дважды пароль - выдаёт ошибку: "Пользователя не существует". Удаляю метод authenticate($attribute,$params) из User.php - так регистрирует..

[adm] zolter

Было сказано: Четверг, 02 Июль 2009

Спасибо больше. 5 секунд подождите, отредактирую статью и скажу в чем была ошибка.

[adm] zolter

Было сказано: Четверг, 02 Июль 2009

Зайдите в модель (User.php) и измените строчку:

array('passwd', 'authenticate')

на:
array('passwd', 'authenticate', 'on' => 'login'),

проблемы бала в том что в on не было указанно для какого сценария должно срабатывать правило. поэтому при регистрации, срабатывало правило и проверяло есть ли такой пользователь с таким паролем xD теперь когда там явно указанно 'login', то правило будет применяться только при авторизации. (форма регистрации будет его игнорировать)

[adm] zolter

Было сказано: Четверг, 02 Июль 2009

Вам еще надо исправить ошибку в коде из прошлой статьи которую я описал вот в этом комментарии (http://www.dbhelp.ru/yii-auth-and-reg-1/page/#comment-344).

[guest] Влад

Было сказано: Четверг, 02 Июль 2009

Спасибо за статью!
Очень радует быстрое исправление своих ошибок

[guest] Гость

Было сказано: Четверг, 02 Июль 2009

Сенк!

[guest] lev

Было сказано: Пятница, 03 Июль 2009

кул!

[adm] zolter

Было сказано: Пятница, 03 Июль 2009

Скоро будет еще одна статья по этому уроку. (сегодня-завтра 100%)

[guest] ppy

Было сказано: Суббота, 04 Июль 2009

Спасибо за статью, но не раскрыта тема как проверять и отклонять запросы в контроллере если юзер не залогинен.

[adm] zolter

Было сказано: Воскресенье, 05 Июль 2009

Вы имеете ввиду контроль доступа залогиненых пользователей к отдельным экшинсам? Да действительно, сначало думал написать это всё в одной статье, но потом понял что сильно будет грузить голову (очень много инфы). Поэтому через пару уроков - обязательно рассмотрю этот вопрос но уже в качестве отдельной статьи.

[adm] zolter

Было сказано: Среда, 08 Июль 2009

В статью добавлена ссылка на рабочий проект. (rar) архив содержит в себе исходники всех предыдущих уроков + текущего урока. Что бы запустить его от вас требуется изменить немного index.php (прописать новый путь к yii) и config/main.php (логин пароль к базе)

[guest] patison

Было сказано: Понедельник, 20 Июль 2009

Поправочку можно?
Вот тут:

// Проверяем является ли пользователь гостем
// ведь если он уже зарегистрирован - формы он не должен увидеть.
if (!Yii::app()->user->isGuest) {
throw new CException('Вы уже зарегистрированы!');

Советую везде слово ЗАРЕГИСТРИРОВАН заменить на АВТОРИЗИРОВАН, а то немного вводит в заблуждение :)

[adm] zolter

Было сказано: Понедельник, 20 Июль 2009

Да, вы правы :)
Сегодня поменяю :)

[guest] Maxxdev

Было сказано: Понедельник, 02 Ноябрь 2009

После перехода на версию 1.1 столкнулся с тем, что при авторизации не вызывается метод public function authenticate($attribute,$params) модели User.php. Копал копал, причиной оказалось выражение
array('passwd', 'authenticate', 'on' => 'login').
array('passwd', 'authenticate') - работает. Кто нибудь знает причину столь странного поведения?

[adm] zolter

Было сказано: Вторник, 03 Ноябрь 2009

Да. Я уже столкнулся с этим.

В методе validate теперь первый парраметр это не название сценария, а список атрибутов которые надо проверять. Или если null - тогда все атрибуты участвуют в валидации. Как я понял название сценария теперь надо задавать иначе. вместо:

if ($model->validate('test')) {
...
}

делаю:

$model->scenario = 'test';
if ($model->validate()) {
...
}

Я так решил эту проблему.

[adm] zolter

Было сказано: Вторник, 03 Ноябрь 2009

Вот как было раньше:
http://www.yiiframework.com/doc/api/1.0.10/CModel#validate-detail

т.е. два параметра, первый сценарий, второй список атрибутов если надо. А сейчас вот так:

http://www.yiiframework.com/doc/api/CModel#validate-detail

т.е. без названия сценария

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

[guest] Maxxdev

Было сказано: Среда, 04 Ноябрь 2009

Т.е. сейчас правильным будет использовать
array('passwd', 'authenticate') вместо
array('passwd', 'authenticate', 'on' => 'login') ?

[adm] zolter

Было сказано: Среда, 04 Ноябрь 2009

Не. В самой модели вы ничего не меняете. Просто из-за того что разработчик поменял 1 парраметр - ваша модель не понимает что сейчас используется сценарий "login". Поэтому правило array('passwd', 'authenticate', 'on' => 'login') не отрабатывает.

В контроллере где вы сейчас проводите валидацию у вас наверно есть строчка:

if ($model->validate('login')) {
}


так вот её надо заменить на:
$model->scenario = 'test';
if ($model->validate()) {
}


т.е. название сценария теперь ненадо передавать в функцию validate, а надо указывать в парраметр scenario.

п.с. вместо validate возможно вы используете save('login'), в этом случае все тоже идентично.

[adm] zolter

Было сказано: Среда, 04 Ноябрь 2009

Если мы с вами говорим о статье которая написанна выше, то в ней строчку:

// Проверяем правильность данных
if($form->validate('login')) {
// если всё ок - кидаем на главную страницу
$this->redirect(Yii::app()->homeUrl);
}


надо заменить на :

// Проверяем правильность данных
$model->scenario = 'login';
if($form->validate()) {
// если всё ок - кидаем на главную страницу
$this->redirect(Yii::app()->homeUrl);
}

[guest] Maxxdev

Было сказано: Среда, 04 Ноябрь 2009

Точнее не $model->scenario = 'login';
а $form->scenario = 'login';
Вариант с $form->validate('login') мне кажется был более красивым решением =)

[adm] zolter

Было сказано: Среда, 04 Ноябрь 2009

Сенк ) то копи-паст сбивает :)

да старый вариант конечно был красивее, не знаю зачем так сделали

[guest] Dima

Было сказано: Понедельник, 09 Ноябрь 2009

Нашел интересную тему на форуме yii

http://www.yiiframework.com/forum/index.php?/topic/3133-registration-forms-little-tips/page__st__20

Регистрация с подтверждением email.
Для восстановления пароля используется секретный вопрос.
Вообщем все дела ;)

[adm] zolter

Было сказано: Понедельник, 09 Ноябрь 2009

Да, интересная :)

[guest] alexandrov

Было сказано: Понедельник, 01 Февраль 2010

после того как прохожу аутентификацию, делается переход на главную, но в меню стоит опять же ссылка "Вход", с чем это связано?

[guest] zolter

Было сказано: Понедельник, 01 Февраль 2010

Может в браузере куки отключены?

[guest] alexandrov

Было сказано: Четверг, 04 Февраль 2010

пробовал в двух браузерах...ну лан, наверное только у меня не работает. жду от автора продолжения статей по построению биллинга - оч. интересно!

[adm] zolter

Было сказано: Четверг, 04 Февраль 2010

Как раз проектирую базу для биллинга :)

[guest] rummer

Было сказано: Пятница, 26 Февраль 2010

Может метод getId() по какой то причине не перегружаться???


private $_id;

public function authenticate()
{
$login =$this->username;
$password = md5($this->password);
$user = User::model()->find("login=? AND password=?", array($login,$password));
if($user){
$this->_id = $user->id_user;
$this->_login = $user->login;
return true;
} else {
return false;
}
}

public function getId()
{
return $this->_id;
}


Вывожу - <H3>Ваш ID, <?=Yii::app()->user->getId();?>!
Вместо id_user, выводит имя пользователя из таблицы (login). Откуда что берется?!

[guest] Гость

Было сказано: Пятница, 26 Февраль 2010

<?=Yii::app()->user->id;?>

надо.

[guest] Гость

Было сказано: Понедельник, 12 Апрель 2010

Думаю лучше мню сделать через zii как в оригинале :)

<?php $this->widget('zii.widgets.CMenu',array(
'items'=>array(
array('label'=>'Главная', 'url'=>array('/post/index')),
array('label'=>'Вход', 'url'=>array('/user/login'), 'visible'=>Yii::app()->user->isGuest),
array('label'=>'Регистрация', 'url'=>array('/user/registration'), 'visible'=>Yii::app()->user->isGuest),
array('label'=>'Выход ('.Yii::app()->user->name.')', 'url'=>array('/user/logout'), 'visible'=>!Yii::app()->user->isGuest)
),
)); ?>

[adm] zolter

Было сказано: Понедельник, 12 Апрель 2010

Конечно! Просто статья писалась когда был yii 1.0.x, и zii тогда не существовало :)

[guest] Гость

Было сказано: Пятница, 23 Апрель 2010

Статья замечательная! А подскажите, как и где пароль можно через md5 пропустить, чтобы в базу открытые пароли не писать.

[guest] Гость

Было сказано: Пятница, 23 Апрель 2010

Кажеься понял
$form->passWD = md5($_POST['User']['passWD']);
Может есть что поинтереснее?

И еще вопрос, как записать текущую дату? - внедрить NOW()

[adm] zolter

Было сказано: Пятница, 23 Апрель 2010

Спасибо за хороший отзыв! :)

По поводу шифрования пароля - совершенно верно, md5 будет вполне достаточно. Можете делать двойной md5. Если используете md5 не забудьте тогда еще в UserIdentity сделать:

else if($record->passwd!==md5($this->password))


По поводу NOW() делайте вот так:
$form->peremenaia_vremeni = new CDbExpression('NOW()');

NickSun

Было сказано: Пятница, 30 Апрель 2010

Как быть в такой ситуации:
На каждой странице сайта есть форма авторизации которая появляется при нажатии на кнопку (т.е. чтоб авторизоваться переходить на другую страницу не нужно). И собственно вопрос: где и как нужно создать модель формы, чтобы она успешно отрисовалась не зависимо от нашего местоположения на сайте (т.е. не зависимо от экшина и контроллера).

[guest] zolter

Было сказано: Суббота, 01 Май 2010

Очень просто. Для формы авторизации создаете отдельный виджет. А уже в лаяуте делаете его вывод. И получится что на каждой странице за которую отвечает лаяут - будет ваша форма авторизации

NickSun

Было сказано: Суббота, 01 Май 2010

Спасибо, виджет как раз то что нужно! А этот редирект $this->redirect(Yii::app()->user->returnUrl); вернет на страницу с которой авторизовались?

[guest] Гость

Было сказано: Пятница, 07 Май 2010

что за странное поле в таблице User "Salt" в стандартном демо блоге, для чего оно, и какую роль оно играет? Спасибо!

[guest] Гость

Было сказано: Суббота, 08 Май 2010

Насколько я уже понял читая доки что поле Salt это слово(секрет) которое в перемешку с паролем зашифруеться в md5 чтоб эще больше сделать безопасным пароль, прав ли я? вы я так понял в своем примере реестрации не расматривали такой шифровки

[guest] Гость

Было сказано: Суббота, 08 Май 2010

В моем примере для упрощения шифрование не используется.

[guest] Jay

Было сказано: Суббота, 29 Май 2010

Salt - как правило случайное значение, которое используется для подмешивания в пароль и может храниться где-то в базе (своя salt для каждого пользователя).
Двойное md5 или любое другое двойное хеширование приводит к меньшей криптостойкости. Это связано с увеличением числа коллизий, то есть когда хеш может быть одинаковым для разных исходных данных.

[guest] Гость

Было сказано: Четверг, 12 Август 2010

у меня не получается сделать ни регистрацию, ни авторизацию. какие-то проблемы с валидацией. только я не могу понять что не так. подскажите пожалуйста. выводится такая ошибка:
preg_match(): Compilation failed: invalid UTF-8 string at offset 12
ошибка одинаковая для регистрации и авторизации.

[guest] Гость

Было сказано: Четверг, 12 Август 2010

вот еще что пишет:
Source File

C:\work\yii\framework\validators\CRegularExpressionValidator.php(44)
00032: * Validates the attribute of the object.
00033: * If there is any error, the error message is added to the object.
00034: * @param CModel the object being validated
00035: * @param string the attribute being validated
00036: */
00037: protected function validateAttribute($object,$attribute)
00038: {
00039: $value=$object->$attribute;
00040: if($this->allowEmpty && $this->isEmpty($value))
00041: return;
00042: if($this->pattern===null)
00043: throw new CException(Yii::t('yii','The "pattern" property must be specified with a valid regular expression.'));
00044: if(!preg_match($this->pattern,$value))
00045: {
00046: $message=$this->message!==null?$this->message:Yii::t('yii','{attribute} is invalid.');
00047: $this->addError($object,$attribute,$message);
00048: }
00049: }
00050: }
00051:

[guest] zolter

Было сказано: Пятница, 13 Август 2010

Удалите в rules тогда проверку на допустимые символы в логине:

array('login', 'match', 'pattern' => '/^[A-Za-z0-9А-Яа-я\s,]+$/u','message' => 'Логин содержит недопустимые символы.'),

[guest] Гость

Было сказано: Пятница, 13 Август 2010

спасибо=) помогло. авторизация теперь работает, а вот регистрация нет. переходит на страницу успешной регистрации, но в таблицу в бд ничего не записывает.

[guest] Илья

Было сказано: Вторник, 23 Ноябрь 2010

думаю, стоит сделать статьи для новой версии фреймворка, а то разбираться почему не работает как то не хочется. Тем более CForm используется не так, как рекомендует разработчик

vlad

Было сказано: Пятница, 28 Январь 2011

Автор, спасибо за статью, только есть одна просьба :
выложите дамп БД, или покажите ссылку, если она была ранее представлена.
Спасибо.

[guest] Гость

Было сказано: Понедельник, 04 Июль 2011

session_regenerate_id() [<a href='function.session-regenerate-id'>function.session-regenerate-id</a>]: Cannot regenerate session id - headers already sent

An internal error occurred while the Web server was processing your request. Please contact the webmaster to report this problem.

Thank you.

вот что выдает если ввести правельные логгин и пароль при регистрации.

[guest] TranceSmile

Было сказано: Четверг, 18 Август 2011

Может быть у тебя файлы сохранены в UTF-8, а должны быть utf-8 without BOM

[guest] Гость

Было сказано: Вторник, 11 Октябрь 2011

Блин! Замучился разбираться уже...
Проблема: после валидации по правилу array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'registration') (у меня именно 'password' и 'password2') объект $form становиться девственно чистым и не обременённым какими-либо данными.

password2 - публичный атрибут, в который, почему-то не пишется значение формы повторения пароля password2 в момент присвоения $form->attributes = $_POST['Users'], приходиться делать $form->password2 = $_POST['Users']['password2']. Хотя в safeAttributes password2 присутствует.

В шоке от документации к фрейм-ворку. Даже на данной статье (которая не подходит к текущей версии) учиться гораздо проще)...

[guest] Maxx

Было сказано: Вторник, 11 Октябрь 2011

Попробуй делать проверку двух полей как автор этой статьи, через отдельный метод проверки. У меня compareAttribute в свое время тоже не хотел проверять, а мне было лень разбератся. Поэтому тоже испльзовал отдельный метод.

[guest] Гость

Было сказано: Суббота, 22 Октябрь 2011

Блин. Всё делаю по порядку, но не получается пройти авторизацию. При вводе любого логина и правильной капче выбрасывает на главную. Если ввести не правильную капчу, то выдает ошибку. На логины и пароли вообще внимание не обращает при авторизации.
Скачал Ваш архив тоже самое.

[guest] Гость

Было сказано: Суббота, 22 Октябрь 2011

Решилось как-то так:
В User.php заменил
array('passwd', 'authenticate', 'on' => 'login')
на
array('passwd', 'authenticate')
теперь всё ок.
Я так понял, что это разница в версиях. Может стоит указать в скобках что нужно изменить если у вас 1.1.
Спасибо за статьи.

[guest] yakoval

Было сказано: Четверг, 24 Ноябрь 2011

Насчет safeAttributes(): как понял, эта функция называется getSafeAttributeNames(). Была аналогичная проблема с пустотой поля passwd2, когда изменил имя функции все заработало.

[guest] Гламурная птица

Было сказано: Воскресенье, 01 Январь 2012

Добрый день.

У сеня почемуто не получается содать поле password2. Я пишу: CHtml::activePasswordField($form, 'password2'), а при загрузке сраниы вылетает ошибка: "Не определено свойство "User.password2"."
Я его в safeAttributes записал. Не подскажите, в чем проблемма?

[guest] Wa1deMar

Было сказано: Пятница, 18 Май 2012

У меня при регестрации выбивает ошибку Пользователь не существует!
Как это можно исправить?

[guest] Гость

Было сказано: Пятница, 09 Ноябрь 2012

Добрый день, все понравилось, отличная статья, но вот почему нет ссылки logout?После входа перекидывает на главную

[guest] Гость

Было сказано: Воскресенье, 25 Ноябрь 2012

include(authenticate.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory кот знает почему?

[guest] lumen

Было сказано: Воскресенье, 25 Ноябрь 2012

*кто знает почему?

[guest] Гость

Было сказано: Воскресенье, 25 Ноябрь 2012

Второго поля пароля не было,решил это так:
В registration.php после строки

        <td><?=CHtml::activeLabel($form, 'passwd'); ?></td>
<td><?=CHtml::activePasswordField($form, 'passwd') ?></td>

Добавил тоже самое но вместо passwd написал passwd2, вообщем вот что нужно добавить после кода который показан сверху
        <td><?=CHtml::activeLabel($form, 'passwd2'); ?></td>
<td><?=CHtml::activePasswordField($form, 'passwd2') ?></td>

[guest] Гость

Было сказано: Воскресенье, 25 Ноябрь 2012

При регистрации выводило что пользователь не существует, но после чтения комментариев выше нашел ответ и все работает!))

[guest] Dead_Angel

Было сказано: Среда, 12 Декабрь 2012

У меня почему то тоже просто на главную кидает и все. Автор может пора статьи переписать под актуальную версию фреймворка. как мануал я бы даже заплатил вам за это

bemulima

Было сказано: Пятница, 28 Декабрь 2012

Мм, проблема смотрю не только у меня).У мну тож регистрация работает, а вот авторизация почему то не работает, просто кидает на главную страницу и "Регистрация вход" не меняется на "Yii::app()user->name". ГОсподин Zolter, ну тут без вашей помощи не обойтись в этом тумане, подскажите что же не так, куда идти?

[guest] zolter

Было сказано: Пятница, 28 Декабрь 2012

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

bemulima

Было сказано: Пятница, 28 Декабрь 2012

((Ну да есть, но не помогает, эти исправлении тоже постарели, ошибка выходит: session_regenerate_id() [<a href='function.session-regenerate-id'>function.session-regenerate-id</a>]: Cannot regenerate session id - headers already sent - не верю что это из за кодировки как выше TranceSmile написал) Ну не может быть, я предпочитаю UTF без бума

[guest] maxx

Было сказано: Пятница, 28 Декабрь 2012

Это из-за того что перед стартом сессии в браузер выплюнулась какая то строка или символ. Я надеюсь ты руками сессию не стартуешь внутри yii, если нет - значит скорее всего из-за того что спереди файла при сохранении проблем или еще чтото

[guest] Гость

Было сказано: Суббота, 29 Декабрь 2012

Я уже почти выучил все комментарии еще чуть чуть я буду знать наизусть) Все перепробовал, никак не хочет сработать, та же ошибка.
на CFormModel нелья да присвоить таблицу БД:)?

bemulima

Было сказано: Суббота, 29 Декабрь 2012

Замучился) какая функция отправить id к сессию?

bemulima

Было сказано: Суббота, 29 Декабрь 2012

Кое что выяснил, в UserIdentity
$record=User::model()->findByAttributes(array('login'=>$this->username)); - работает, из БД все выводит, но если пробовать:
echo '<pre>';print_r($record->id);echo '</pre>'; ошибка выходит, а если так:
echo '<pre>';print_r($record);echo '</pre>'; то выводит, осталось теперь только поймать:)))

bemulima

Было сказано: Суббота, 29 Декабрь 2012

нет, я не туда взглянул, с UserIdentity все в порядке оказывается, вся ошибка кроется здесь)
$form->scenario = 'login';
if($form->validate()) {
// если всё ок - кидаем на главную страницу
$this->redirect(Yii::app()->homeUrl);
}

[guest] Гость

Было сказано: Воскресенье, 30 Декабрь 2012

Вот блин а, три дня мучался, а оказывается в файле UserIdentity перед <? была пробел, аффигет!!!!

[guest] maxx

Было сказано: Понедельник, 31 Декабрь 2012

Повнимательнее ))

[guest] Twiks

Было сказано: Среда, 27 Февраль 2013

На самом деле копипаст с http://www.yiiframework.com/doc/guide/1.1/ru/form.model

Искал регистрацию, а автор ничего про нее не написал, потому что в официальном мануале, видимо, нет ее описания..

[adm] zolter

Было сказано: Среда, 27 Февраль 2013

На самом деле это может быть копипастом для тех кто даже пол абзаца не прочитал.

[guest] dignityinside

Было сказано: Суббота, 27 Апрель 2013

Спасибо, идею взял с вашего сайта, но написал все по своему :)

[guest] guest_is_guest

Было сказано: Вторник, 22 Июль 2014

@zolter,
Осваиваю Yii по Вашим урокам и столкнулся с таким вопросом:
Вы в своем коде ссылаетесь на сценарий валидации register или login напрямую при вызове валидации if($form->validation('register'). Я пробовал такой подход, но у меня почему-то так не работает, работает только если явно указать $form->scenario = 'register'. В Вашем коде явного указания не нашел. Подскажите, где я что-то не досмотрел. Спасибо

[guest] Гость

Было сказано: Вторник, 31 Январь 2017

Конфеты для похудения EcoPills Raspberry Похудеть стало так легко
http://offer.moscow/

[guest] Гость

Было сказано: Суббота, 04 Февраль 2017

Tinedol - лучшеизлечит вас от грибка быстро и надежно
http://offer.moscow/

[guest] Гость

Было сказано: Суббота, 04 Февраль 2017

А, что очень даже интересно,спасибо за информацию. http://allix.ru

[guest] Гость

Было сказано: Вторник, 14 Февраль 2017

https://goo.gl/sMCbUE - https://mosforte.ru/wa-data/public/shop/products/34/69/16934/images/14485/14485.750x0.jpg

Здравствуй, Дорогой Друг.
Мы изучаем слог музыки и считаем, что любой человек способен научиться играть музыку и расширять естественные музыкальный слух и ритм. Музыкальная импровизация это превосходнейший метод, чтобы расслабить сознание и тело, открыть индивидуальные эмоции и научиться гармонии. Музыка развивает воображение. Для воплощении этой идеи, в течении 3 лет мы занимаемся изучением и изготовлением стальных язычковых барабанов – глюкофонов.
Глюкофон — это тональный лепестковый барабан ручной работы в форме НЛО. У нас вы можете подобрать как уже изготовленный глюкофон, так и сделать заказ на глюкофон по личным запросам, выбрав его диаметр, число нот, настройку лепестков, цвет и фактуру.
Глюкофон — это не простой музыкальный инструмент. Это установка, которая позволяет устранять стресс, интуитивно и самостоятельно развивать слух и ощущение ритма в любом возрасте.
Наши инструменты выполнены с особой точностью. Форма корпуса и структура стали формирует звуковые колебания волной внутри барабана. Основная мысль нашей команды — это создание высококачественных и абсолютно функционирующих глюкофонов по ценам, доступным каждому. С помощью этого иструмента мы хотим показать людям, что каждый человек может научиться играть свою собственную музыку в любом возрасте, за коротое время.
У нас в магазине Вы сможете приобрести глюкофон и познакомиться с особенностями этого инструмента.

https://goo.gl/VfpDEc - http://www.likeni.ru/upload/medialibrary/1b9/cctiiymmmlux-ffoytaiulvkt.png

Перейти на Наш сайт --->>> https://goo.gl/KgVLLC

















































ханг hang
глюкофон фацебоок
vadjraghanta idiophone
глюкофон ля минор
ханг драм форум
ханг строй
глюкофон ростов
ханг драм купить екатеринбург
глюкофон купить в екатеринбурге
глюкофон ют

оригинальный подарок мужу 30 летие
магазин необычных подарков красноярск
элитные подарки кожи
купить оригинальную зажигалку +в подарок
магазин оригинальных подарков свадьбу

dream drum kit
глюкофон фа диез мажор
ханг уроки
tank drum строй aeolian купить
идиофон ок
ханг космическая музыка
ханг строй
ханг драм купить екатеринбург
hapi drum machine
глюкофон купить омск

необычные подарки невесты
необычный подарок супруге день рождения
самый необычный подарок руками
оригинальный подарок программисту
какой оригинальный подарок можно подарить +на свадьбу


hapi drum how to play
глюкофон цветок жизни
ханг драм музыка скачать бесплатно
eclipse funtone steel tongue drum
hapi drum ufo
hang drum youtube
ханг видео ютуб
hapi drum bangkok
глюкофон харьков
идиофон базар

оригинальный активный подарок
магазин необычных подарков саратов
липецк подарки необычные
оригинальные подарки +на юбилей 30 лет
оригинальные подарки паре

hang drum фото
ханг цена украине
hang оригинал
идиофон википедия
ханг авито
глюкофон цена купить
глюкофон українська
hapi drum mini uk
hang официальный сайт
слушать ханг лучшие

оригинальные подарки +на юбилей 55 маме
оригинальный подарок воспитателю +на выпускной
необычный подарок любимому день
оригинальный подарок мужчине +на 40 лет
оригинальный подарок мужу деревянную свадьбу


глюкофон смотреть
глюкофон для детей
ханг перкуссионный инструмент
ханг на ютубе
глюкофон астана
steel tongue drum chile
ханг драм стоимость
мини ханг лучшие
глюкофон большие
hapi drum out of tune

оригинальные подарки +за 100 рублей
оригинальные подарки +на годовщину свадьбы друзьям
оригинальные подарки мурманск
оригинальные подарки бухгалтеру
оригинальный подарок руками +на 30 лет

ханг драм как устроен
сколько стоит глюкофон
ханг 444
hapi drum circle
steel tongue drum wiki
глюкофон 12 лепестков купить
глюкофон история создания
глюкофон ивангай
ханг инструмент купить
ханг драм где купить

необычные подарки любимым форум
оригинальное оформление денежных подарков
оригинальный подарок +на день рождения подруге деньгами
оригинальные подарки +на день рождения коллеге девушке
оригинальный подарок лучшей подруге +на день рождения


глюкофон устройство
глюкофон купить омск
инструмент ханг
ханг драм музыка скачать торрент
hapi drum vst
глюкофон россия
hang drum купить в москве
ханг зиммер
ханг томск
стоимость муз инструмент ханг +в украіні

оригинальный подарок +на день матери +своими руками
оригинальное дарение подарка
оригинальный подарок директору мужчине +на день рождения
оригинально сделать подарок юбилей
оригинальные подарки +на свадьбу форум

http://xyya.net
jqV1sfi57F

[guest] Гость

Было сказано: Пятница, 17 Февраль 2017

Ostrovdom2.ru Видео ДОМ 2 с новой возлюбленной Тарасова огорчило Ольгу Бузову <a href=http://ostrovdom2.ru/>ДОМ-2 Остров Любви>>></a>

[guest] Гость

Было сказано: Воскресенье, 19 Февраль 2017

Как назвать котенка? Нашла здесь http://allcatsnames.com/ragdoll-kitten-names ragdoll cat names полный список имен для котов.




[guest] Гость

Было сказано: Четверг, 23 Февраль 2017

Привет всем участникам форума!
Отличная база порно фильмов, все новинки порно 2016 2017 в HD по категориям смотреть онлайн бесплатно в качестве HD http://russkoepornostudentki.net/ :
http://russkoepornostudentki.net/isklyuchitelno-v-zadnicu.htm
http://russkoepornostudentki.net/mamasha-vkusila-chernyy-chlen.htm
http://russkoepornostudentki.net/mulatki.htm
http://russkoepornostudentki.net/muzhik-i-baba-v-odnoy-kamere.htm
http://russkoepornostudentki.net/telochki-v-tualete.htm
http://russkoepornostudentki.net/policeyskaya-daet-v-ochko.htm
http://russkoepornostudentki.net/otlizala-spyashchey-podruzhke-sladkuyu-popku.htm

[guest] Гость

Было сказано: Четверг, 23 Февраль 2017

Доброго времени суток
Иногда удача сама стучится в дверь.
Я рискнул и получилось!
Смотрите видео, правдо не с начала, но основное снял на тел.
Смотреть: http://yeslib.ru/news/46-game.html

[guest] Гость

Было сказано: Суббота, 25 Февраль 2017

This page <a href=http://allchemicals.info/chemicals-browse-e/368-effective-collisons>Effective Collisons</a> is a wordbook of chemistry terms. Chemistry has <a href=http://allchemicals.info/chemicals-browse-h/498-hydrate>Hydrate</a> an intercontinental vocabulary and a ...
unmitigated zero – a speculative <a href=http://allchemicals.info/chemicals-browse-x/789-xanthate>xanthate</a> form with an eye to a system at zero Kelvin where a system does not discharge or absorb force (all atoms are at excess) ....
innate chemistry – a on the whole of chemistry <a href=http://allchemicals.info/chemicals-browse-s/761-surface-tension>Surface Tension</a> involved with systematic compounds;

[guest] Гость

Было сказано: Воскресенье, 26 Февраль 2017

еннто точно


------
<a href=http://pogoda5day.ru/>погода сейчас</a> | http://pogoda5day.ru/

[guest] Гость

Было сказано: Воскресенье, 26 Февраль 2017

Типизированная предпринимательство обработки сборного приборов, шлейфного оборудования, сосудных инструментов также инородной теплообменной также отделительной плафонов, какая длительное время промышляет выделкой также монтажом перворазрядной продукции ладна предоставить свой производственный комплект всякому заказчику лишь на подходящих и квалифицированных договоре https://snmash.ru/ экуменизмом. Торговое предприятие СпецНефтеМаш разрабатывает нынешнее заводское оборудование собственно по оптимальным концепции, каковы протестированные профессионалами также обозначают убежденные активы, еще также широко употребляются у огненной, химикатной либо продуктной обороте, водоканалах, нефтедобывающих и метанных фабриках. Наша компания функционирует по инновационным программам основании данной продукции и предоставляем высочайшее свойства покупателю. Именно на данном источнике <a href=https://snmash.ru/production/zaporno-reguliruyushchaya-armatura/zadvizhki/zadvizhki-stalnye/zkse-16.html>задвижка стальная ЗКСЭ-16</a> абонент имеете ресурс измерить весь ассортимент товара в наличности также совершить поручение надобное запасное, калориферное, отделительное, регулирующее плюс видоизмененное обеспечение у желательное Вам время, тогда наши менеджера окажут содействие предназначенной покупке и основывают хорошие обстановку собственно для пособничества и отличный условия работу.

[guest] Гость

Было сказано: Воскресенье, 26 Февраль 2017

Мамам безусловно ясно, определенно напряженно усмотреть в формированием карапузом, обдумать всяческие значимые явления у стадию усовершенствования и построить безопасный программа воспитания, в частности данный вопрос относиться неопытные мамы, что дебютно обрели ребенком, от этого администрация разрешаем онлайн-сайт рекомендаций под в положении плюс матерей. Определенно на странице <a href=http://dearmummy.ru/pervye-shagi-rebenka-kakaya-obuv-dlya-etogo-nuzhna-ee-razmer-rekomendacii-evgeniya-komarovskogo.html>первая обувь для малыша как выбрать комаровский</a> администрация демонстрируем постоянно общепопулярные меню, которые касаются активность малюток к тому же юных мамочек, здесь Вы имеют возможность увидеть рубрики положение, присмотр по детями, благополучие детей, рацион, игры, рывки, любимое занятие собственно для http://dearmummy.ru/ многодетных матерей, полезные деятельность плюс большинство прочего, без чего не привыкнет ваш малыш. Наши публикации, рекомендации также отзывы бесспорно вспожение потенциальной новой маме и чреватая матери.

[guest] Гость

Было сказано: Воскресенье, 26 Февраль 2017

Те кто, какие сталкивался из признаками падения самцовой полового возбуждения, понимают, о том что огромная единица панацеи, какие продаются у веб-ресурсах, не дают долгожданного следствия к тому же предуготовленные только лишь с целью выкачивания финансовых капиталов. Одначе, мы желаем выделить мужчинам легкое и результативное решение вашей дела - панацея именно для крепкой силы "Молот Тора" <a href=http://infazavr.com/sredstva-dlya-potencii-prodleniya-polovogo-akta-dejstvuyut.php>сказано в в авторитетном блоге</a>, капли, что прошло испытание значительная часть покупателями и изъвило реальный эффект сразу после немного суток действия. Непосредственно же у протяжения установки питья перлов Молот Тора клиент отметите продвинутое заводящее активизация, продление продолжительности интимной отношений, длительную http://infazavr.com/ побуждение, и полное несуществование сторонних результата. Достаточно 2 немного у день Молот Тора затем пользователь имеет сильную самцовую возможности к значительное время. Выбрать жидкость Молот Тора можно на отрытом портале, что развернуто представлен состав, цена и основательные рецензия hammer of thor покупателей.

[guest] Гость

Было сказано: Воскресенье, 26 Февраль 2017

Рискую показаться профаном, но всё же спрошу, откуда это и кто вообще написал?


-----
<a href=http://master-climat.com.ua/ventilyatsiya>Монтаж вентиляционных систем в Киеве</a>

[guest] Гость

Было сказано: Понедельник, 27 Февраль 2017

Бизнес | Женский журнал <a href=http://moscowteaparty.com/category/rabota-i-karera>Бизнес >>></a>

[guest] Гость

Было сказано: Среда, 01 Март 2017

Абсолютное исцеление невыполнимость эрекции и выполнение закономерной физической жизни для самца поможет выполнить доброкачественный, и протестированный препарат капли Молот тора <a href=http://fivegoods.ru/66-kapli-molot-tora-chto-mozhet-podarit-muzhchine-etot-preparat-ego-cena-i-sostav-v-state.html>молот тора капли для потенции отзывы</a> , каковы скоротечно и совершенно оказывают действие на ваш бентос манерой продукт тестостерона, то что согласно поднимает эрекцию, продолжает совокупление акт еще и стимулирует долгий удовлетворение у мужчины и женщины соучастников. Истинные экстракты народных растений, каковы умещаются в смесь препарата образовывают настоятельные биологические вещества также органические компоненты именно для крепкой эрекции, поэтому пособничество также действенность обеспечена любому ламеру. Приобрести достоверные жидкость Молот Тора пользователь получает возможность положительно на указанном официальном сайте в доступные деньги на удобное период дня.

[guest] Гость

Было сказано: Среда, 01 Март 2017

Относительная часть сильного пола часто сходятся на вопросом придавленности вследствие свой мелкий длину полового органа, это же видимо воссоздается на интимной связи также отношенияхрасположения с женщинами, но постановление задачи постоянно возможно отыскать с помощью результативных препаратах, какой мы презентует клиентам любопытству собственно на нашем ресурсе <a href=http://fivegoods.ru/162-krem-titan-gel-dlya-uvelicheniya-muzhskogo-chlena-podrobnye-svedeniya-o-kreme-otzyvy-o-tovare-ot-potrebiteley-i-drugie-vazhnye-momenty-po-ispolzovaniyu-effektivnogo-sredstva-dlya-muzhchin.html>титан гель</a>. Эффективный гель Titan gel с целью влечение детородного органа помог вполне большинству мужчинам обречь убежденности для себя, и поможет клиенту. Бальзам-жидкость для силы составлен на настоящих ингредиентов, которые сопровождают восстановление андрогенов также увеличивает половую активность, в временем пару суток употребления Вы переживете плодтворный итога: увеличение органа собственно на несколько милиметража , половую устойчивость, затянутую силу плюс лишение побочных действий. Выбрать Titan gel юзеры сумеют прямо по презентованном веб ресурсе.

[guest] Гость

Было сказано: Среда, 01 Март 2017

Приветствую всех! <br>
<b> Новости политики, Россия США Украина Белоруссия Новороссия Донбасс ЛНР ДНР </b> http://planetnew.ru/ <br>

<b> фашисты днр </b> <a href="http://planetnew.ru/"> россия проиграла донбасс </a> <br>
<b> лнр world of tanks </b> <a href="http://planetnew.ru/">http://planetnew.ru/</a> <br>
<b> списки террористов днр </b> <a href="http://planetnew.ru/">http://planetnew.ru/</a> <br>
<br>
http://planetnew.ru/news/22142-eks-komanduyuschiy-armiey-sshastal-sovetnikom-ministra-oborony-ukrainy.html <br>
http://planetnew.ru/v-mire/16109-kompaniya-in-win-vypustila-v-prodazhu-korpus-dlya-pk-h-tower-za-2-745.html <br>
http://planetnew.ru/foto/1556-oao-zavod-graz-grabovskiy-avtomobilnyy-zavod.html <br>
http://planetnew.ru/news/4560-minfin-rf-vystupaet-za-postepennoe-povyshenie-eksportnoy-poshliny-na-sug.html <br>
http://planetnew.ru/news/16656-yaponki-protiv-atomnoy-energii-posle-fukusimy-my-nikogda-ne-prostim-pravitelstvo.html <br>
http://planetnew.ru/news/11200-idealnaya-kazn-v-amerikanskoy-oklahome-budut-umerschvlyat-prestupnikov-azotom.html <br>

[guest] Гость

Было сказано: Среда, 01 Март 2017

<a href=http://fun2news.com/en/news/207-it-is-so-funny-20-photos-of-shocked-animals?limit=1&start=17>10 deadly viruses that are killing the population of the Earth</a>
Elon Musk, it seems, <a href=http://fun2news.com/en/news/210-top-10-most-dangerous-ways-to-relax?limit=1&start=1>Ghost Ordos - frustrated "city of the future"</a> loves nothing more than to spin plates. When most of us might be looking to lighten the load, he's piling on the ambition.
The serial entrepreneur's latest gambit is to fly people around the Moon. Two wealthy individuals have apparently lodged significant deposits with his SpaceX company to make this journey.
We have no idea who they are, just that these space tourists <a href=http://fun2news.com/en/news/207-it-is-so-funny-20-photos-of-shocked-animals?limit=1>The best works of the photo contest Hasselblad Masters Awards 2016</a> include "nobody from Hollywood".
That Mr Musk should announce his intention to carry out a Moon loop should not really be a surprise; such a venture is on the natural path to deep-space exploration and colonisation - his stated end goals.
What does take the breath away is the timeline.
He's talking about doing this journey in late 2018, in hardware that has not yet even flown. That's Elon for you.

Перейти к странице:

Оставить комментарий


Код:
Имя: