操作
Backport(バックポート) #2607
完了3.6RC1以降、仮登録時にメールアドレスが登録されないと新規登録がおこなえない
開始日:
2011-11-08
期日:
進捗率:
100%
予定工数:
説明
Yuya Watanabe さんがほぼ13年前に更新
修正案¶
下記修正案はプラグインに依存してしまうので最善ではない.そのためバックポート元にはこの記述を行なっていない.
また, 処理の順番などを加味するとリファクタリングが必要なのではないかと思われる.
簡単な動作確認を行ったところ問題はなかった.
diff --git a/lib/model/doctrine/MemberTable.class.php b/lib/model/doctrine/MemberTable.class.php index 4ec3816..59766f4 100644 --- a/lib/model/doctrine/MemberTable.class.php +++ b/lib/model/doctrine/MemberTable.class.php @@ -153,7 +153,7 @@ class MemberTable extends opAccessControlDoctrineTable return $this->findInactive($config->getMemberId()); } - public function findByValidRegisterToken($token) + public function findByValidRegisterToken($token, $authType) { $member = $this->findByRegisterToken($token); if (!$member) @@ -161,6 +161,11 @@ class MemberTable extends opAccessControlDoctrineTable return false; } + if (!$authType || 'MailAddress' !== $authType) + { + return $member; + } + $configTable = Doctrine::getTable('MemberConfig'); $mailTypes = array("pc_address", "pc_address_pre", "mobile_address", "mobile_address_pre"); diff --git a/lib/user/opSecurityUser.class.php b/lib/user/opSecurityUser.class.php index be67cc6..d013c1e 100644 --- a/lib/user/opSecurityUser.class.php +++ b/lib/user/opSecurityUser.class.php @@ -417,7 +417,7 @@ class opSecurityUser extends opAdaptableUser public function setRegisterToken($token) { - $member = Doctrine::getTable('Member')->findByValidRegisterToken($token); + $member = Doctrine::getTable('Member')->findByValidRegisterToken($token, $this->getAuthAdapter()->getAuthModeName()); if (!$member) { return false;
Yuya Watanabe さんがほぼ13年前に更新
修正案2¶
- opAuthMailAddressPluginに依存しない実装にした場合に変更しなければならない部分を減らすために$mailTypesをより呼び出し側に近いところに持ってきた.
- findByValidRegisterToken()をMemberConfig名群について最新のregister_tokenを持っているかどうかを調べる汎用的なメソッドに修正した.
- findByValidRegisterToken()内で必要とするデータはすべてMemberConfigTableであるが,findByRegisterToken()がMemberTable内にあるため本修正案ではクラスをまたいだメソッドの移動は採用していない.
diff --git a/lib/model/doctrine/MemberTable.class.php b/lib/model/doctrine/MemberTable.class.php index 4ec3816..8ad8a28 100644 --- a/lib/model/doctrine/MemberTable.class.php +++ b/lib/model/doctrine/MemberTable.class.php @@ -153,21 +153,19 @@ class MemberTable extends opAccessControlDoctrineTable return $this->findInactive($config->getMemberId()); } - public function findByValidRegisterToken($token) + public function findByValidRegisterToken($token, $configNames) { $member = $this->findByRegisterToken($token); if (!$member) { return false; } - $configTable = Doctrine::getTable('MemberConfig'); - $mailTypes = array("pc_address", "pc_address_pre", "mobile_address", "mobile_address_pre"); $query = $configTable->createQuery('m'); - foreach ($mailTypes as $mailType) + foreach ($configNames as $configName) { - $hash = $configTable->generateNameValueHash($mailType, $member->getConfig($mailType)); + $hash = $configTable->generateNameValueHash($configName, $member->getConfig($configName)); $query->orWhere('m.name_value_hash = ?', $hash); } $configs = $query->fetchArray(); diff --git a/lib/user/opSecurityUser.class.php b/lib/user/opSecurityUser.class.php index be67cc6..60ff898 100644 --- a/lib/user/opSecurityUser.class.php +++ b/lib/user/opSecurityUser.class.php @@ -417,7 +417,15 @@ class opSecurityUser extends opAdaptableUser public function setRegisterToken($token) { - $member = Doctrine::getTable('Member')->findByValidRegisterToken($token); + if ('MailAddress' === $this->getAuthAdapter()->getAuthModeName()) + { + $mailTypes = array("pc_address", "pc_address_pre", "mobile_address", "mobile_address_pre"); + $member = Doctrine::getTable('Member')->findByValidRegisterToken($token, $mailTypes); + } + else + { + $member = Doctrine::getTable('Member')->findByRegisterToken($token); + } if (!$member) { return false;
Yuya Watanabe さんがほぼ13年前に更新
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 91f2bbfc9e8bf50d6fb4283fba7ccc23fae5e045 で適用されました。
Kousuke Ebihara さんがほぼ13年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Yuma Sakata さんがほぼ13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
テストOKです。
操作