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]);
}