public function actionRequestPasswordReset($type = 'sms', $step = '1') { if ($type === 'sms') { $session = Yii::$app->session; $session->open(); if ($step !== '2') { $model = new PasswordResetMobileRequestForm(); if ($model->load(Yii::$app->request->post()) && $model->validate()) { if ($model->sendMsg()) { $session['passwordResetTimeout'] = time() + 900; // 15 minutes $session['passwordResetMobile'] = $model->mobile; return $this->redirect(['request-password-reset', 'type' => $type, 'step' => '2']); } else { $session->setFlash('smsFailure', '对不起,验证码发送失败。'); } } } elseif (isset($session['passwordResetTimeout']) && $session['passwordResetTimeout'] >= time()) { $model = new PasswordResetVerifyForm(); $model->load(Yii::$app->request->post()); if (Yii::$app->request->isAjax) { Yii::$app->response->format = Response::FORMAT_JSON; return ActiveForm::validate($model); } if (Yii::$app->request->isPost && $model->validate()) { if ($model->generateToken()) { $model->clearSession(); return $this->redirect(['reset-password', 'token' => $model->user->password_reset_token]); } else { $session->setFlash('resetErr', '操作失败,请稍后再试!'); } } } else { $session->setFlash('resetAgain', '对不起,请您重新开始一次。'); return $this->redirect(['request-password-reset', 'type' => $type]); } } elseif ($type === 'email') { $model = new PasswordResetRequestForm(); if ($model->load(Yii::$app->request->post()) && $model->validate()) { if ($model->sendEmail()) { Yii::$app->getSession()->setFlash('emailSent', '我们已经为您发送了一条链接,请进入邮箱查看。'); return $this->refresh(); } else { Yii::$app->getSession()->setFlash('emailFailure', '对不起,我们无法对您的账户进行重置密码操作。'); } } } else { throw new BadRequestHttpException('参数错误!'); } return $this->render('requestPasswordResetToken', ['model' => $model, 'type' => $type, 'step' => $step]); }