add reset pass method to api
This commit is contained in:
@ -3,10 +3,16 @@
|
||||
namespace frontend\modules\api\controllers;
|
||||
|
||||
use common\models\email\RegistrationEmail;
|
||||
use common\models\email\ResetPasswordEmail;
|
||||
use common\models\User;
|
||||
use common\services\EmailService;
|
||||
use Exception;
|
||||
use frontend\models\PasswordResetRequestForm;
|
||||
use frontend\models\ResetPasswordForm;
|
||||
use frontend\models\SignupForm;
|
||||
use Yii;
|
||||
use yii\base\InvalidParamException;
|
||||
use yii\web\BadRequestHttpException;
|
||||
|
||||
class RegisterController extends ApiController
|
||||
{
|
||||
@ -78,4 +84,114 @@ class RegisterController extends ApiController
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @OA\Post(path="/register/request-password-reset",
|
||||
* summary="Запросить сброс пароля",
|
||||
* description="Метод метод высылает токен сброса пароля на почтовый адрес",
|
||||
* tags={"Registration"},
|
||||
* @OA\RequestBody(
|
||||
* @OA\MediaType(
|
||||
* mediaType="multipart/form-data",
|
||||
* @OA\Schema(
|
||||
* required={"email"},
|
||||
* @OA\Property(
|
||||
* property="email",
|
||||
* type="string",
|
||||
* description="Электронная почта пользователя",
|
||||
* ),
|
||||
* ),
|
||||
* ),
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="Возвращает true в случае успеха",
|
||||
* @OA\MediaType(
|
||||
* mediaType="application/json",
|
||||
* ),
|
||||
* ),
|
||||
* )
|
||||
*
|
||||
* @return bool|string
|
||||
*/
|
||||
public function actionRequestPasswordReset()
|
||||
{
|
||||
$model = new PasswordResetRequestForm();
|
||||
|
||||
if ($model->load(Yii::$app->request->post(), '') & $model->validate()) {
|
||||
|
||||
/* @var $user User */
|
||||
$user = User::findOne([
|
||||
'status' => User::STATUS_ACTIVE,
|
||||
'email' => $model->email,
|
||||
]);
|
||||
|
||||
if (!$user) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
|
||||
$user->generatePasswordResetToken();
|
||||
if (!$user->save()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->emailService->sendEmail(new ResetPasswordEmail($user));
|
||||
}
|
||||
|
||||
return json_encode($model->getFirstErrors());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @OA\Post(path="/register/reset-password",
|
||||
* summary="Cброс пароля",
|
||||
* description="Метод сброса пароля",
|
||||
* tags={"Registration"},
|
||||
* @OA\RequestBody(
|
||||
* @OA\MediaType(
|
||||
* mediaType="multipart/form-data",
|
||||
* @OA\Schema(
|
||||
* required={"token", "password"},
|
||||
* @OA\Property(
|
||||
* property="token",
|
||||
* type="string",
|
||||
* description="Токен сброса пароля",
|
||||
* ),
|
||||
* @OA\Property(
|
||||
* property="password",
|
||||
* type="string",
|
||||
* description="Новый пароль пользователя",
|
||||
* ),
|
||||
* ),
|
||||
* ),
|
||||
* ),
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="Возвращает сообщение об успехе",
|
||||
* @OA\MediaType(
|
||||
* mediaType="application/json",
|
||||
* ),
|
||||
* ),
|
||||
* )
|
||||
*
|
||||
* @return array|string
|
||||
* @throws BadRequestHttpException
|
||||
*/
|
||||
public function actionResetPassword()
|
||||
{
|
||||
try {
|
||||
$model = new ResetPasswordForm(Yii::$app->request->post()['token']);
|
||||
} catch (Exception $e) {
|
||||
throw new BadRequestHttpException($e->getMessage());
|
||||
}
|
||||
|
||||
if ($model->load(Yii::$app->request->post(), '') & $model->validate() & $model->resetPassword()) {
|
||||
return 'Success! New password saved.';
|
||||
} else {
|
||||
return $model->errors;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user