Backport(バックポート) #2525
完了OpenPNE2系からコンバートした環境でかんたんログインできない携帯機種がある
100%
説明
Overview (現象)¶
OpenPNE2の時にかんたんログインを設定しておき、そのSNSをOpenPNE3系(3.4 or 3.6)にコンバートした場合、設定した携帯機種でかんたんログインできない。
au(misora)はかんたんログインできるが、softbankとdocomoの携帯でかんたんログインできない。
本来はかんたんログインできるのが正しい仕様である。
もちろん、コンバート後かんたんログインを再設定すれば再びかんたんログインできるようになる。
再現バージョン¶
- OpenPNE3.6beta10-dev
- OpenPNE3.4.12-dev
再現した携帯機種¶
- Docomo SH-05A,P901is
- softbank 840P
再現手順¶
- OpenPNE2.14で携帯(au、docomo、softbank)を登録する
- かんたんログインできるようにしておく(個体識別番号を登録しておく)
- 手順1で登録したSNSをOpenPNE3.6(または3.4)にコンバートする
- 手順1で登録した携帯でかんたんログインを試みる
- auはかんたんログインできる
- docomoとsoftbankはかんたんログイン出来ずにログイン失敗しましたのページに遷移する
Causes (原因)¶
OpenPNE 2 では端末付与型の携帯電話個体識別番号を優先して取得しているにも関わらず、 OpenPNE 3 ではゲートウェイ付与型の携帯電話個体識別番号を優先して取得し、かんたんログインに使用しているため。
Way to fix (修正内容)¶
ゲートウェイ付与型の携帯電話個体識別番号のみ取得や、端末付与型の携帯電話個体識別番号のみの取得がおこなえるようにし、かんたんログインなどそれらの区別が必要な場面において柔軟に対応できるようにした。
この変更を利用したかんたんログイン自体の実装の修正については、 opAuthMobileUIDPlugin 側で実施した。 http://redmine.openpne.jp/issues/2220
Yuya Watanabe さんが約13年前に更新
#1113 の変更によってコンフリクトが発生する部分について¶
9f3f558e9c6075454cbcc095f110bf7eaf9c5e73 の変更によってgetMobileUID()に引数を付与することができるようになった.
また 89da5b0c6632cfac9c668df9da331aca3a037332 の変更によってgetMobileUID()を用いる部分で必要な箇所について適宜引数が与えれるように変更された.
3.4 では 89da5b0c6632cfac9c668df9da331aca3a037332 の対応部分においてコンフリクトが発生する.具体的には以下の部分である.
apps/mobile_frontend/modules/member/actions/actions.class.php
3.4
106 if ($request->hasParameter('update')) 107 { 108 if (!$request->getMobileUID()) 109 { 110 $this->getUser()->setFlash('error', 'Your mobile UID was not registered.'); 111 $this->redirect('member/configUID'); 112 } 113 114 $memberConfig = Doctrine::getTable('MemberConfig')->retrieveByNameAndMemberId('mobile_uid', $this->getUser()->getMemberId()); 115 if (!$memberConfig) 116 { 117 $memberConfig = new MemberConfig(); 118 $memberConfig->setMember($this->getUser()->getMember()); 119 $memberConfig->setName('mobile_uid'); 120 } 121 $memberConfig->setValue($request->getMobileUID()); 122 $memberConfig->save(); 123 $this->getUser()->setFlash('notice', 'Your mobile UID was set successfully.'); 124 $this->redirect('member/configUID'); 125 } 126 elseif ($request->hasParameter('delete') && $this->isDeletableUid) 127 { 128 $mobileUid->delete(); 129 $this->getUser()->setFlash('notice', 'Your mobile UID was deleted successfully.'); 130 $this->redirect('member/configUID'); 131 }
3.7
82 if ($request->hasParameter('update')) 83 { 84 $cookieUid = sfContext::getInstance()->getResponse()->generateMobileUidCookie(); 85 86 if (!$request->getMobileUID(false) && !$cookieUid) 87 { 88 $this->getUser()->setFlash('error', 'Your mobile UID was not registered.'); 89 $this->redirect('member/configUID'); 90 } 91 92 $member = $this->getUser()->getMember(); 93 $member->setConfig('mobile_uid', $request->getMobileUID(false)); 94 if ($cookieUid) 95 { 96 $member->setConfig('mobile_cookie_uid', $cookieUid); 97 } 98 99 $this->getUser()->setFlash('notice', 'Your mobile UID was set successfully.'); 100 $this->redirect('member/configUID'); 101 } 102 elseif ($request->hasParameter('delete') && $this->isDeletableUid) 103 { 104 $mobileUid->delete(); 105 sfContext::getInstance()->getResponse()->deleteMobileUidCookie(); 106 $this->getUser()->setFlash('notice', 'Your mobile UID was deleted successfully.'); 107 $this->redirect('member/configUID'); 108 } 109 }
#1113 は 3.4 では対応されていないため 3.4 の121行目と 3.7 の93行目について比較を行い, 3.4 の121行目のgetMobileUID()の引数にfalseが必要であるかどうかを検討したところ 内容的には 3.4 の内容とほぼ一致したことを確認したため必要であると判断した.
比較用コード断片¶
3.7 lib/model/doctrine/Member.class.php
97 public function setConfig($configName, $value, $isDateTime = false) 98 { 99 Doctrine::getTable('MemberConfig')->setValue($this->getId(), $configName, $value, $isDateTime); 100 }
3.7 lib/model/doctrine/MemberConfigTable.class.php
93 public function setValue($memberId, $name, $value, $isDateTime = false) 94 { 95 $config = $this->retrieveByNameAndMemberId($name, $memberId); 96 if (!$config) 97 { 98 $config = new memberConfig(); 99 $config->setMemberId($memberId); 100 $config->setName($name); 101 } 102 if ($isDateTime) 103 { 104 $config->setValueDatetime($value); 105 } 106 $config->setValue($value); 107 $config->save(); 108 $this->results[$memberId][$name] = $config; 109 }
Yuya Watanabe さんが約13年前に更新
Kousuke Ebihara さんが約13年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 41d367ac7ca6d95a1813a812e01d5dc628c388b9 で適用されました。
Yuma Sakata さんが約13年前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
frontend、backend 共にログインできなくなり、devモードで確認したところ、以下エラーが表示されました。
Parse error: syntax error, unexpected ')' in /home/sakata/sns/34x.hoge.jp/lib/request/sfOpenPNEWebRequest.class.php on line 137
該当ファイルの137行目を確認したところ、以下エラーが表示されました。
$uid = $this->hashMobileUid($this->getMobile()->getUID()));
この問題が含まれていたコミットも記述します。
d567ad5c (watanabe 2011-10-26 16:36:59 +0900 137) $uid = $this->hashMobileUid($this->getMobile()->getUID()));
) が1つ多いのが原因だと思われますので、修正お願いします。
wa ta さんが約13年前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 2f709f43627e8637756405bd1c862802e59d3770 で適用されました。
Kousuke Ebihara さんが約13年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Yuma Sakata さんが約13年前に更新
- ステータス を Pending Testing(テスト待ち) から Rejected(差し戻し) に変更
- 進捗率 を 70 から 50 に変更
2.12 → 3.4.17 アップグレードした場合、au(misora)はかんたんログインできるが、softbank(840P)とdocomo(N-01B)の携帯でかんたんログインできませんでした。
docomo と softbank でもかんたんログインできるように修正お願いします。
Kousuke Ebihara さんが約13年前に更新
- ステータス を Rejected(差し戻し) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Yuma Sakata は書きました:
2.12 → 3.4.17 アップグレードした場合、au(misora)はかんたんログインできるが、softbank(840P)とdocomo(N-01B)の携帯でかんたんログインできませんでした。
docomo と softbank でもかんたんログインできるように修正お願いします。
この指摘についてですが、おそらく #2526 への対応が必要です。コード上は問題ないと思われるためテスト待ちに戻しますが、実際のテストはプラグイン側の対応がおこなわれるまで待ってください。
Yuma Sakata さんが約13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
テストOKです。