- Метод регистрации теперь работает через транзакции и в случае неудачного...

- Метод регистрации теперь работает через транзакции и в случае неудачного сохранения, в базе не останутся лишние данные
parent d1ca6c23
...@@ -5,6 +5,8 @@ use Yii; ...@@ -5,6 +5,8 @@ use Yii;
use common\modules\users\models\User; use common\modules\users\models\User;
use \common\modules\rbac\models\AuthAssignment; use \common\modules\rbac\models\AuthAssignment;
use common\modules\messageTemplate\models\MessageTemplate; use common\modules\messageTemplate\models\MessageTemplate;
use yii\base\Exception;
use yii\web\BadRequestHttpException;
class UserController extends \common\components\BaseController { class UserController extends \common\components\BaseController {
const ERROR_PASSWORD_RECOVER_AUTH = 'Вы не можете восстановить пароль будучи авторизованным!'; const ERROR_PASSWORD_RECOVER_AUTH = 'Вы не можете восстановить пароль будучи авторизованным!';
...@@ -121,32 +123,64 @@ class UserController extends \common\components\BaseController { ...@@ -121,32 +123,64 @@ class UserController extends \common\components\BaseController {
$model->attributes = $_POST['User']; $model->attributes = $_POST['User'];
if ($model->validate()) { if ($model->validate()) {
$model->password = Yii::$app->getSecurity()->generatePasswordHash($model->password); $transaction = Yii::$app->db->beginTransaction();
$model->activate_code = md5($model->password . 'xdf5sf'); try {
$model->source = User::SOURCE_DEFAULT; $model->password = Yii::$app->getSecurity()->generatePasswordHash($model->password);
$model->save(false); $model->activate_code = md5($model->password . 'xdf5sf');
$model->source = User::SOURCE_DEFAULT;
$assignment = new AuthAssignment(); if (!$model->save(false))
$assignment->item_name = 'user'; throw new BadRequestHttpException(current(current($model->getErrors())), 500);
$assignment->user_id = $model->id;
$assignment->save(); $assignment = new AuthAssignment();
$assignment->item_name = 'user';
/*$linkActivate = Yii::$app->params['frontUrl'].'/activate/'.$model->activate_code; $assignment->user_id = $model->id;
$subject = 'Регистрация на сайте '.Yii::$app->params['frontUrl']; if (!$assignment->save())
Yii::$app->mailer->compose('activate', ['link' => Yii::$app->params['frontUrl'], 'linkActivate' => $linkActivate]) throw new BadRequestHttpException(current(current($assignment->getErrors())), 500);
->setFrom(Yii::$app->params['adminEmail'])
->setTo($model->email) /*$linkActivate = Yii::$app->params['frontUrl'].'/activate/'.$model->activate_code;
->setSubject($subject) $subject = 'Регистрация на сайте '.Yii::$app->params['frontUrl'];
->send(); */ Yii::$app->mailer->compose('activate', ['link' => Yii::$app->params['frontUrl'], 'linkActivate' => $linkActivate])
$params = []; ->setFrom(Yii::$app->params['adminEmail'])
$params['link_activate'] = Yii::$app->params['frontUrl'].'/activate/'.$model->activate_code; ->setTo($model->email)
$params['link'] = Yii::$app->params['frontUrl']; ->setSubject($subject)
$templateModel = MessageTemplate::findOne(['name' => 'Регистрация на сайте']); ->send(); */
$model->afterRegistration($templateModel->id, $params); $params = [];
$params['link_activate'] = Yii::$app->params['frontUrl'].'/activate/'.$model->activate_code;
echo json_encode(array('success'=>true)); $params['link'] = Yii::$app->params['frontUrl'];
}
else { if ($model->afterRegistration()!==true)
throw new BadRequestHttpException($model->getErrors('email'), 500);
$transaction->commit();
} catch (Exception $e) {
$transaction->rollBack();
echo json_encode(array('errors'=>$e->getMessage()));
}
// $model->password = Yii::$app->getSecurity()->generatePasswordHash($model->password);
// $model->activate_code = md5($model->password . 'xdf5sf');
// $model->source = User::SOURCE_DEFAULT;
// $model->save(false);
//
// $assignment = new AuthAssignment();
// $assignment->item_name = 'user';
// $assignment->user_id = $model->id;
// $assignment->save();
//
// /*$linkActivate = Yii::$app->params['frontUrl'].'/activate/'.$model->activate_code;
// $subject = 'Регистрация на сайте '.Yii::$app->params['frontUrl'];
// Yii::$app->mailer->compose('activate', ['link' => Yii::$app->params['frontUrl'], 'linkActivate' => $linkActivate])
// ->setFrom(Yii::$app->params['adminEmail'])
// ->setTo($model->email)
// ->setSubject($subject)
// ->send(); */
// $params = [];
// $params['link_activate'] = Yii::$app->params['frontUrl'].'/activate/'.$model->activate_code;
// $params['link'] = Yii::$app->params['frontUrl'];
// $templateModel = MessageTemplate::findOne(['name' => 'Регистрация на сайте']);
// $model->afterRegistration($templateModel->id, $params);
//
// echo json_encode(array('success'=>true));
} else {
echo json_encode(array('errors'=>$model->getErrors())); echo json_encode(array('errors'=>$model->getErrors()));
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment