ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 13 years ago

Closed 13 years ago

#2517 closed defect (duplicate)

ログイン時にuidを設定できていない

Reported by: imamura623 Owned by: nobody
Priority: minor Milestone:
Component: その他 Version: 2.10.x & 2.12.x & 2.14.x
Keywords: Cc:

Description

http://sns.openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=16985 より転記

バージョン 2.10.6 の場合でレポートします。
webapp\modules\pc\do\o_login.php の48行目から引用します。

48: if (IS_SLAVEPNE && !($c_member_id = db_member_c_member_id4username_encrypted($auth->getUsername(), false))) {
49: db_member_create_member($_POST['username']);
50: }
51:
52: db_api_update_token($auth->uid());

ここで問題なのは $auth->uid() が必ず 0 だということです。
もう一つ、webapp\modules\ktai\do\o_login.php の 56 行目から引用します。

56: if (IS_SLAVEPNE && !($c_member_id = db_member_c_member_id4username_encrypted($auth->getUsername(), true))) {
57: db_member_create_member($_POST['username']);
58: }
59-80: リダイレクト先の判定など
81: $_SESSION['c_member_id'] = $c_member_id;

こちらはpcよりもわかりやすいバグですね。IS_SLAVEPNE が true でなければ $c_member_id に値が設定されることはありません。

pcの場合もktaiの場合も、以下のような処理の流れが正解です。

1. $c_member_id = db_member_c_member_id4username_encrypted($auth->getUsername(), true)) でメンバーIDを取得
2. uidの設定や参照には $c_member_id を利用する


そもそも if 文の条件判断中に代入しようというのは間違いです。現状のOpenPNE開発チームはわざわざバグを作りやすいコードを書いている状態だということを認識して、開発に対する基本的な考え方をあらためて欲しいと思います。

なお、構造上の問題(私の感覚ではバグのようなもの)は他にも沢山ありそうです。全面的なリファクタリングをおすすめします。

Change History (1)

comment:1 Changed 13 years ago by ebihara

Resolution: duplicate
Status: newclosed

たとえば

db_api_update_token($auth->uid());

#1883 とは重複しているように見えます。

また、

こちらはpcよりもわかりやすいバグですね。IS_SLAVEPNE が true でなければ $c_member_id に値が設定されることはありません。

これは誤りで、$c_member_idは当該ファイルの19行目にて値が設定されています。

 19         $c_member_id = $requests['c_member_id'];

duplicated としてクローズします。

Note: See TracTickets for help on using tickets.