Метод вызывается 2 раза

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
cpentyc
Сообщения: 52
Зарегистрирован: 2011.11.29, 18:03
Откуда: Казахстан
Контактная информация:

Метод вызывается 2 раза

Сообщение cpentyc »

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

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

public function actionNewpasword($salt, $userId )
    {
        $model = $this->loadModel($userId);// ищу пользователя
        $messages = 'Не удалось изменить пароль.';
        if($model->salt == $salt) //проверяю код 
        {
            if($model->newpassword($userId)) // вызываю сброс пароля
            {
                $messages = 'Новый пароль выслан на почту.';
            }
        }
        else
        {
            $messages = 'Не верный ключ сброса пароля.';
        }
        
        $this->render('activate',array(
            'mes' => $messages,
        ));
    }
 

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

    public function newpassword($userId)
    {
        $pas = substr(self::generateSalt(), 0, 6); // новый пароль
        $user = User::model()->findByPk($userId); // ищем юзера
        $user->password = self::hashPassword($pas, $user->salt); // устанавливаем пароль
        if($user->save()) 
        {
            $body = $pas; // отправляем на почту
            $headers="From: ".Yii::app()->params['adminEmail']."\r\nContent-type: text/html; charset=UTF-8\r\nReply-To: {Yii::app()->params['adminEmail']}";
            mail($user->username ,"Новый пароль",$body,$headers);        
            return true;
        }
        else
            return false;
            
    }
 
Проблема в том что на почту приходит 2 письма. С 2 разными паролями. Работает второй пароль. Я так понял что метод newpassword срабатывает 2 раза потому что из контроллера приходит 1 письмо.
http://cpentyc.ru/ <- наверняка ничего нет я ленивая задница. Лучше в скайп cpentyc. Знаю джумлу
vladimircape
Сообщения: 339
Зарегистрирован: 2012.05.29, 16:31

Re: Метод вызывается 2 раза

Сообщение vladimircape »

Ну во первых salt - это соль, а не код подтверждения.
так грузить модель ,очень странно,
в третьи покажи вид и модель, и полный код
Аватара пользователя
Bethrezen
Сообщения: 42
Зарегистрирован: 2011.04.17, 15:06
Откуда: Tambov
Контактная информация:

Re: Метод вызывается 2 раза

Сообщение Bethrezen »

Пара моментов:
- в newpassword можно использовать $this вместо $user и не искать юзера тогда уж, раз он не статичный у вас.
- salt я так понимаю не меняется же? Это не совсем верно с точки зрения безопасности. Лучше использовать одноразовый хэш со сроком годности.
- mail может и не отработать по многим причинам

Ещё, попробуйте посмотреть в хроме полный список соединений(вкладка Network, кнопка с черным кружочком Preserve log upon Navigation).
Возможно экшен дважды вызывается на клиентской стороне.

Ну и на мой взгляд конечно, правильнее по открытию ссылки с хэшем не генерировать пароль, а предлагать пользователю ввести новый.
DotPlant 2 - Open-source yii2 e-commerce CMS :: GitHub | Official site | Made by DevGroup
Ответить