Project

General

Profile

Bug(バグ) #1617

opMemberAction::executeRegister()でisInvited()チェックがあるため。管理者からの招待、または招待無し登録の場合に登録できない

Added by Hidenori Goto almost 9 years ago. Updated over 3 years ago.

Status:
Fixed(完了)
Priority:
High(高め)
Target version:
Start date:
2010-09-24
Due date:
% Done:

100%

3.6 で発生するか:
Yes
3.8 で発生するか:
Unknown (未調査)

Description

該当箇所

lib/action/opMemberAction.class.php 114行目からのexecuteRegister()アクション

  public function executeRegister($request)
  {
    $member = $this->getUser()->setRegisterToken($request['token']);

    $this->forward404Unless($member && !$this->getUser()->isSNSMember() && $this->getUser()->isInvited());
  }

現象

通常メンバーから招待した場合は、被招待メンバーのmember.invite_member_idに招待元メンバーIDが入り、$this->getUser()->isInvited()がtrueになるため、member/register以降の登録処理へ進める。
しかし、以下の2つのパターンで、member.invite_member_idがnullの状態で招待が送信される。

  1. SNS管理者が管理画面から招待メールを送信した場合
  2. 招待不要で登録可能な設定で、一般ユーザーが自分で登録URLのメールを取得した場合

この2つのパターンではinvite_member_idに入れるべき値がない(nullしかない)ため、$this->getUser()->isInvited()のチェックがある限り登録できない。

暫定的な回避策

lib/action/opMemberAction.class.php 114行目からのexecuteRegister()アクションで、isInvitedチェックをなくす

  public function executeRegister($request)
  {
    $member = $this->getUser()->setRegisterToken($request['token']);

    $this->forward404Unless($member && !$this->getUser()->isSNSMember());
  }

提案

isInvited()チェック自体を無くしてしまうと、招待によるメンバー登録で不正ユーザーをブロックしづらくなる懸念がある(招待元IDを物理削除しても登録可能)ため、なんらかのフラグを追加で準備するのが望ましいのではないかと思います。
(招待メールの送信モードetc)


Related issues

Related to OpenPNE 3 - Backport(バックポート) #1618: opMemberAction::executeRegister()でisInvited()チェックがあるため。管理者からの招待、または招待無し登録の場合に登録できない Fixed(完了) 2010-09-24

Associated revisions

Revision 0f2ce776 (diff)
Added by Kousuke Ebihara over 8 years ago

fixed the member/register action doesn't handle admin invited registration (fixes #1617)

History

#1 Updated by Hidenori Goto almost 9 years ago

related: #1009

#2 Updated by Kousuke Ebihara over 8 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to Kousuke Ebihara
  • Target version set to OpenPNE 3.7.0
  • 3.6 で発生するか set to Yes

#3 Updated by Kousuke Ebihara over 8 years ago

  • Priority changed from Normal(通常) to High(高め)

#4 Updated by Kousuke Ebihara over 8 years ago

アイディアがまだ浮かんでいないのですが、今のところのメモ書きだけでもまずは残しておきます。

  • このバグは登録周りの挙動を改善した 3.5.2 以降でのみ発生します。
  • member/register は b0a083f00ccc92584163cec0ad73062b65b04415 で追加された、招待経由の登録をおこなうためのアクションです。
  • 招待されていない場合の member/register 経由での登録は制限するようになっています(これはあくまで表示用の制限で、登録用のトークンを有しているユーザが招待済みか否かを実際に判別したうえで登録処理をおこなわせるべきかどうかは、その認証プラグインに依って異なります)。
  • 本件で解決するべき問題は「管理画面からの招待が機能していない」という点ということになります。選択可能な招待モードは、「招待なしでの登録を許可する」「SNS参加者に招待を許可する」「招待を許可しない」の三通りが標準で用意されています。「招待を許可しない」は SNS 管理者のみに招待を限定するモードですが、このとき管理者には招待する認証モードを指定させるため、選択可能な認証モードから登録者が自由に選択をおこなえる「SNS参加者に招待を許可する」と同じフローにしてしまうわけにはいきません。そのため、現状の実装のまま、管理画面経由の member/register に案内してしまうこと自体が誤りであると言えます。
  • member/register は「招待なしでの登録を許可する」「SNS参加者に招待を許可する」の認証モード用のフォームしか表示しないので、「招待を許可しない」状態で管理者から招待された場合の登録フローを新たに作るということになるかもしれません。また、管理者から招待された場合の opSecurityUser::isInvited() の返り値をどう扱うべきかについてもあわせて検討し、一番ショックが少ないだろうと思われる方法をためしに実装してみようと思います。

#5 Updated by Kousuke Ebihara over 8 years ago

今のところ思い浮かんでいる案

1. member_config などに管理者から招待されたかどうかのフラグを追加する
2. 1. のフラグがある場合、 opSecurityUser::isInvited() は true を返すようにする
3. 1. のフラグがある場合、 member/register はそのときに指定された認証モードのフォームのみを表示する

#6 Updated by Kousuke Ebihara over 8 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

#7 Updated by Shogo Kawahara over 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

#8 Updated by Hidenori Goto over 8 years ago

http://redmine.openpne.jp/projects/op3/repository/revisions/0f2ce776d1897637e2d430b9fd98d2232a7f1581 が取り込まれた3.7.0-devにて、管理者からの招待メールのURLから登録画面が正常に表示され、登録が完了できることを確認しました。

#9 Updated by Yuma Sakata over 7 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

テストOKです。

#10 Updated by kaoru n over 3 years ago

  • 3.8 で発生するか set to Unknown (未調査)

Also available in: Atom PDF