сделать вход сразу после заполнения формы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

сделать вход сразу после заполнения формы

Сообщение evgeniy123 » 2016.12.03, 15:55

Посоветуйте как сделать вход сразу после заполнения формы регистрации

caHek2x
Сообщения: 1226
Зарегистрирован: 2016.04.12, 20:41

Re: сделать вход сразу после заполнения формы

Сообщение caHek2x » 2016.12.03, 15:59

что у вас не получилось ? после регистрации написать Yii::$app->user->login ?

evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

Re: сделать вход сразу после заполнения формы

Сообщение evgeniy123 » 2016.12.03, 16:05

caHek2x писал(а):что у вас не получилось ? после регистрации написать Yii::$app->user->login ?
User:

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

 
 
 public function afterSave($insert, $changedAttributes){
        parent::afterSave($insert, $changedAttributes);

 $user_last_id_insert = self::last_id_insert(\Yii::$app->db);

 Yii::$app->user->login(User::findOne($user_last_id_insert));

...

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

 public static function last_id_insert($connection){

        $row_last_in_users =  $connection->createCommand('SELECT id FROM users ORDER BY id DESC LIMIT 1')->queryOne();  //uznaem id polzovatelya kotoriitolko vstavil zapis v {users}

        return $row_last_in_users['id'];
    }
Не заходит так. не понимаю почему

caHek2x
Сообщения: 1226
Зарегистрирован: 2016.04.12, 20:41

Re: сделать вход сразу после заполнения формы

Сообщение caHek2x » 2016.12.03, 16:10

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

 public function afterSave($insert, $changedAttributes){
        parent::afterSave($insert, $changedAttributes);

 $user_last_id_insert = self::last_id_insert(\Yii::$app->db);

 Yii::$app->user->login(User::findOne($user_last_id_insert));

 
это что за бред ?
а $this вам чем не устраивает ...

evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

Re: сделать вход сразу после заполнения формы

Сообщение evgeniy123 » 2016.12.03, 16:16

caHek2x писал(а):

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

 public function afterSave($insert, $changedAttributes){
        parent::afterSave($insert, $changedAttributes);

 $user_last_id_insert = self::last_id_insert(\Yii::$app->db);

 Yii::$app->user->login(User::findOne($user_last_id_insert));

это что за бред ?
а $this вам чем не устраивает ...
Эффект тот же :( Мне нужно использовать эту функцию из других мест

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

Re: сделать вход сразу после заполнения формы

Сообщение zelenin » 2016.12.03, 16:18

$user->save();
Yii::$app->getUser()->login(...);

caHek2x
Сообщения: 1226
Зарегистрирован: 2016.04.12, 20:41

Re: сделать вход сразу после заполнения формы

Сообщение caHek2x » 2016.12.03, 16:24

evgeniy123 писал(а):
caHek2x писал(а):

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

 public function afterSave($insert, $changedAttributes){
        parent::afterSave($insert, $changedAttributes);

 $user_last_id_insert = self::last_id_insert(\Yii::$app->db);

 Yii::$app->user->login(User::findOne($user_last_id_insert));

 
это что за бред ?
а $this вам чем не устраивает ...
Эффект тот же :( Мне нужно использовать эту функцию из других мест
это бредовая ф-ция .. .в высоко нагружеенном проэкте если паралельно ктото будет регистрироваться вы получите ид не того пользователя ...
у вас в модели уже есть ид ...

evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

Re: сделать вход сразу после заполнения формы

Сообщение evgeniy123 » 2016.12.03, 16:27

caHek2x писал(а):
evgeniy123 писал(а):
caHek2x писал(а):

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

 public function afterSave($insert, $changedAttributes){
        parent::afterSave($insert, $changedAttributes);

 $user_last_id_insert = self::last_id_insert(\Yii::$app->db);

 Yii::$app->user->login(User::findOne($user_last_id_insert));

 
это что за бред ?
а $this вам чем не устраивает ...
Эффект тот же :( Мне нужно использовать эту функцию из других мест
это бредовая ф-ция .. .в высоко нагружеенном проэкте если паралельно ктото будет регистрироваться вы получите ид не того пользователя ...
у вас в модели уже есть ид ...
Думал что так как с контроллере транзакция то Ok.

Ага. Спасибо за совет
Последний раз редактировалось evgeniy123 2016.12.03, 16:28, всего редактировалось 1 раз.

evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

Re: сделать вход сразу после заполнения формы

Сообщение evgeniy123 » 2016.12.03, 16:27

zelenin писал(а):$user->save();
Yii::$app->getUser()->login(...);

Не работает так же
controller:

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

if ($model->load(Yii::$app->request->post()) AND
            Yii::$app->recaptcha->verifyResponse(User::get_real_ip(),Yii::$app->request->post('g-recaptcha-response'))) {

            $transaction = Yii::$app->db->beginTransaction();

          // if(!$model->validate()) { Yii::warning($model->getErrors());   }

            if ($user = $model->signup() AND  User::validate_count_sms()) {

                Yii::$app->getUser()->login($user);
                
                .....
User:

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

  public function signup()
    {
        if ($this->validate()) {

            $user = new User();
            $user->scenario = 'registration';
            $user->attributes = $this->attributes;
            $user->status = User::STATUS_NEW;
            $user->setPassword($this->password);
            $user->generateAuthKey();
            if ($user->save()) {
                return $user;
            }
            else {
                Yii::warning('oshibochka'.$user->getErrors());
            }
        }

        return null;
    }

caHek2x
Сообщения: 1226
Зарегистрирован: 2016.04.12, 20:41

Re: сделать вход сразу после заполнения формы

Сообщение caHek2x » 2016.12.03, 16:30

ошибки пишет ? User это ActiveRecord implements IdentityInterface ?

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

Re: сделать вход сразу после заполнения формы

Сообщение zelenin » 2016.12.03, 16:31

evgeniy123 писал(а):
zelenin писал(а):$user->save();
Yii::$app->getUser()->login(...);

Не работает так же
controller:

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

if ($model->load(Yii::$app->request->post()) AND
            Yii::$app->recaptcha->verifyResponse(User::get_real_ip(),Yii::$app->request->post('g-recaptcha-response'))) {

            $transaction = Yii::$app->db->beginTransaction();

          // if(!$model->validate()) { Yii::warning($model->getErrors());   }

            if ($user = $model->signup() AND  User::validate_count_sms()) {

                Yii::$app->getUser()->login($user);
                
                ..... 
User:

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

  public function signup()
    {
        if ($this->validate()) {

            $user = new User();
            $user->scenario = 'registration';
            $user->attributes = $this->attributes;
            $user->status = User::STATUS_NEW;
            $user->setPassword($this->password);
            $user->generateAuthKey();
            if ($user->save()) {
                return $user;
            }
            else {
                Yii::warning('oshibochka'.$user->getErrors());
            }
        }

        return null;
    }
 
дебажьте.

evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

Re: сделать вход сразу после заполнения формы

Сообщение evgeniy123 » 2016.12.03, 16:34

caHek2x писал(а):ошибки пишет ? User это ActiveRecord implements IdentityInterface ?
в том и дело что нет ошибок. да. все пишется в бд нормально и перекидывает на home()

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

Re: сделать вход сразу после заполнения формы

Сообщение zelenin » 2016.12.03, 16:38

evgeniy123 писал(а):
caHek2x писал(а):ошибки пишет ? User это ActiveRecord implements IdentityInterface ?
в том и дело что нет ошибок. да. все пишется в бд нормально и перекидывает на home()
в вашем коде не видно редиректа на home - нормально это ил нет не понятно

andrei.obuhovski
Сообщения: 610
Зарегистрирован: 2015.07.16, 10:50

Re: сделать вход сразу после заполнения формы

Сообщение andrei.obuhovski » 2016.12.03, 16:39

Что-то мне кажется что валидация не проходит

evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

Re: сделать вход сразу после заполнения формы

Сообщение evgeniy123 » 2016.12.03, 16:51

andrei.obuhovski писал(а):Что-то мне кажется что валидация не проходит

А как же он сохраняет тогда ?

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

  public function signup()
    {
        if ($this->validate()) {

            $user = new User();
            $user->scenario = 'registration';
            $user->attributes = $this->attributes;
            $user->status = User::STATUS_NEW;
            $user->setPassword($this->password);
            $user->generateAuthKey();
            if ($user->save()) {
                return $user;
            }
            else {
                Yii::warning('oshibochka'.$user->getErrors());
            }
        }

        return null;
    }
     

evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

Re: сделать вход сразу после заполнения формы

Сообщение evgeniy123 » 2016.12.03, 16:53

zelenin писал(а):
evgeniy123 писал(а):
caHek2x писал(а):ошибки пишет ? User это ActiveRecord implements IdentityInterface ?
в том и дело что нет ошибок. да. все пишется в бд нормально и перекидывает на home()
в вашем коде не видно редиректа на home - нормально это ил нет не понятно
Да нормально. просто не писал полностью

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

...
  if ($user = $model->signup() ) {

                Yii::$app->getUser()->login($user);


                if ($user->createEmailConfirmToken() && $user->sendEmailConfirmationMail(Yii::$app->controller->module->getCustomMailView('confirmNewEmail'), 'new_email')) {
                    Yii::$app->getSession()->setFlash('success', Yii::t('users', 'CHECK_YOUR_EMAIL_FOR_FURTHER_INSTRUCTION'));
                    $transaction->commit();



                    return $this->redirect(Url::toRoute('/home'));
                } else {
                    Yii::$app->getSession()->setFlash('error', Yii::t('users', 'CAN_NOT_SEND_EMAIL_FOR_CONFIRMATION'));
                    $transaction->rollBack();
                };

...

andrei.obuhovski
Сообщения: 610
Зарегистрирован: 2015.07.16, 10:50

Re: сделать вход сразу после заполнения формы

Сообщение andrei.obuhovski » 2016.12.03, 17:05

И флешка 'success' приходит?

evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

Re: сделать вход сразу после заполнения формы

Сообщение evgeniy123 » 2016.12.03, 17:07

andrei.obuhovski писал(а):И флешка 'success' приходит?
да


caHek2x
Сообщения: 1226
Зарегистрирован: 2016.04.12, 20:41

Re: сделать вход сразу после заполнения формы

Сообщение caHek2x » 2016.12.03, 17:23

а напишите после строки Yii::$app->getUser()->login($user);
echo Yii::$app->getUser()->id;
die;
чтото выведет ?)

Закрыто