プロジェクト

全般

プロフィール

Backport(バックポート) #2525

OpenPNE2系からコンバートした環境でかんたんログインできない携帯機種がある

Kousuke Ebihara12年以上前に追加. 12年以上前に更新.

ステータス:
Fixed(完了)
優先度:
High(高め)
担当者:
対象バージョン:
開始日:
2011-05-12
期日:
進捗率:

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

再現手順

  1. OpenPNE2.14で携帯(au、docomo、softbank)を登録する
  2. かんたんログインできるようにしておく(個体識別番号を登録しておく)
  3. 手順1で登録したSNSをOpenPNE3.6(または3.4)にコンバートする
  4. 手順1で登録した携帯でかんたんログインを試みる
  5. auはかんたんログインできる
  6. docomoとsoftbankはかんたんログイン出来ずにログイン失敗しましたのページに遷移する

Causes (原因)

OpenPNE 2 では端末付与型の携帯電話個体識別番号を優先して取得しているにも関わらず、 OpenPNE 3 ではゲートウェイ付与型の携帯電話個体識別番号を優先して取得し、かんたんログインに使用しているため。

Way to fix (修正内容)

ゲートウェイ付与型の携帯電話個体識別番号のみ取得や、端末付与型の携帯電話個体識別番号のみの取得がおこなえるようにし、かんたんログインなどそれらの区別が必要な場面において柔軟に対応できるようにした。

この変更を利用したかんたんログイン自体の実装の修正については、 opAuthMobileUIDPlugin 側で実施した。 http://redmine.openpne.jp/issues/2220


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #2087: OpenPNE2系からコンバートした環境でかんたんログインできない携帯機種がある Fixed(完了) 2011-05-12
関連している OpenPNE 3 - Task(タスク) #2527: opAuthMobileUIDPlugin 1.0.1 のリリースとバンドルをおこなう Fixed(完了) 2011-10-19

関係しているリビジョン

リビジョン 41d367ac (差分)
Kousuke Ebihara12年以上前に追加

added test for fallback uid (fixes #2525, BP from #2087)

BP from #2087
ae8664d1d5568a4c22dbacc64e4318abbbed71e2

リビジョン d567ad5c (差分)
Yuya Watanabe12年以上前に追加

divided opWebRequest::getMobileUID() into retriving normal uid part, retriving fallback uid part and hashing uid part (refs #2525, BP from #2087)

BP from #2087
9f3f558e9c6075454cbcc095f110bf7eaf9c5e73

リビジョン 52bf5c90 (差分)
Yuya Watanabe12年以上前に追加

changed to retrieve only non-fallback mobile uid in OpenPNE 3 core because fallback uid is just for keeping BC reason (refs #2525, BP from #2087)

BP from #2087
89da5b0c6632cfac9c668df9da331aca3a037332

リビジョン ee4b26c3 (差分)
Kousuke Ebihara12年以上前に追加

changed not to retrieve fallback uid in member/registerMobileToRegisterEnd (oversight in my 89da5b0c commit) (refs #2525, BP from #2087)

BP from #2087
05c7f459f684fbe3c3c9dbd43e8f8c2ce4a04784

リビジョン 6a463216 (差分)
Kousuke Ebihara12年以上前に追加

added importing configuration for keeping backward compatible with a legacy (insecure) implementation of mobile uid authentication on upgrade from OpenPNE 2 (refs #2525, BP from #2087)

BP from #2087
0601f3e28cb9374f30dfae31e0ef1d4ab6190853

リビジョン 6468e65c (差分)
Yuya Watanabe12年以上前に追加

changed opWebRequest::getMobileFallbackUID() to return both of OpenPNE 3 format ID and OpenPNE 2 format one (refs #2525, BP from #2087)

BP from #2087
50d374cd0634027da5abd226c78550f8adbd8410

リビジョン 2f709f43 (差分)
Yuya Watanabe12年以上前に追加

(fixes #2525, BP from #2087) removed end parenthesis

履歴

#1 Yuya Watanabe12年以上前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者Yuya Watanabe にセット

#2 Yuya Watanabe12年以上前に更新

#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   }

#3 Yuya Watanabe12年以上前に更新

メモ

#1810534dd33ce9f2fbb46f747c74fd7bce558be95ca6 が原因でコンフリクトするが, #2241 で示される通り 3.4 では対応する必要がない.

#4 Kousuke Ebihara12年以上前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 41d367ac7ca6d95a1813a812e01d5dc628c388b9 で適用されました。

#5 Yuma Sakata12年以上前に更新

  • ステータス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つ多いのが原因だと思われますので、修正お願いします。

#6 wa ta12年以上前に更新

  • ステータスRejected(差し戻し) から Pending Review(レビュー待ち) に変更

更新履歴 2f709f43627e8637756405bd1c862802e59d3770 で適用されました。

#7 Kousuke Ebihara12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

#8 Yuma Sakata12年以上前に更新

  • ステータスPending Testing(テスト待ち) から Rejected(差し戻し) に変更
  • 進捗率70 から 50 に変更

2.12 → 3.4.17 アップグレードした場合、au(misora)はかんたんログインできるが、softbank(840P)とdocomo(N-01B)の携帯でかんたんログインできませんでした。
docomo と softbank でもかんたんログインできるように修正お願いします。

#9 Kousuke Ebihara12年以上前に更新

  • ステータスRejected(差し戻し) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

Yuma Sakata は書きました:

2.12 → 3.4.17 アップグレードした場合、au(misora)はかんたんログインできるが、softbank(840P)とdocomo(N-01B)の携帯でかんたんログインできませんでした。
docomo と softbank でもかんたんログインできるように修正お願いします。

この指摘についてですが、おそらく #2526 への対応が必要です。コード上は問題ないと思われるためテスト待ちに戻しますが、実際のテストはプラグイン側の対応がおこなわれるまで待ってください。

#10 Yuma Sakata12年以上前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

テストOKです。

他の形式にエクスポート: Atom PDF