/** * Execute reset password. * * @access public * @return Response */ public function action_reset_password() { // Already logged in Auth::check() and Response::redirect('member'); $member_password_pre = Model_MemberPasswordPre::get4token(Input::param('token')); if (!$member_password_pre || !Site_Util::check_token_lifetime($member_password_pre->updated_at, conf('member.recover.password.token_lifetime'))) { Session::set_flash('error', sprintf('URLが%sです。', term('form.disabled'))); throw new HttpNotFoundException(); } $form = $this->form_reset_password(); $val = $form->validation(); if (Input::method() == 'POST') { Util_security::check_csrf(); $auth = Auth::instance(); $error_message = ''; $is_transaction_rollback = false; try { if (!$val->run()) { throw new FuelException($val->show_errors() ?: term('site.password') . 'が正しくありません'); } $post = $val->validated(); $to_email = $member_password_pre->email; $to_name = $member_password_pre->member->name; DB::start_transaction(); $auth->change_password_simple($member_password_pre->member_id, $post['password']); $member_password_pre->delete(); // 仮登録情報の削除 DB::commit_transaction(); $mail = new Site_Mail('memberResetPassword'); $mail->send($to_email, array('to_name' => $to_name)); $auth->login($to_email, $post['password']); Session::set_flash('message', term('site.password') . 'を登録しました。'); Response::redirect('member'); } catch (EmailValidationFailedException $e) { Util_Toolkit::log_error('send mail error: ' . __METHOD__ . ' validation error'); $error_message = 'メール送信エラー'; } catch (EmailSendingFailedException $e) { Util_Toolkit::log_error('send mail error: ' . __METHOD__ . ' sending error'); $error_message = 'メール送信エラー'; } catch (Auth\SimpleUserUpdateException $e) { $is_transaction_rollback = true; $error_message = term('site.password') . 'の登録に失敗しました。'; } catch (\Database_Exception $e) { $is_transaction_rollback = true; $error_message = \Site_Controller::get_error_message($e, true); } catch (FuelException $e) { $is_transaction_rollback = true; $error_message = $e->getMessage(); } if ($error_message) { if ($is_transaction_rollback && DB::in_transaction()) { DB::rollback_transaction(); } Session::set_flash('error', $error_message); } } $this->set_title_and_breadcrumbs(term('site.password') . 'の再登録'); $data = array('val' => $val, 'member_password_pre' => $member_password_pre); $this->template->content = View::forge('member/recover/reset_password', $data); $this->template->content->set_safe('html_form', $form->build('member/recover/reset_password')); // form の action に入る }
private function check_token() { if (!($member_pre = Model_MemberPre::get4token(Input::param('token')))) { return false; } if (!Site_Util::check_token_lifetime($member_pre->updated_at, conf('member.register.token_lifetime'))) { return false; } return $member_pre; }
private static function check_confirmation_code(Model_MemberEmailPre $member_email_pre, $code) { if (!Site_Util::check_token_lifetime($member_email_pre->updated_at, conf('member.setting.email.codeLifetime'))) { return false; } if (empty($member_email_pre->code)) { return false; } if ($member_email_pre->code != $code) { return false; } return true; }