2

マルチテナントアプリを構築しています。ユーザーがアカウントを作成するとき、電子メールとパスワードを入力する必要があります。サインインすると、そのユーザー (「管理者」) は自分のアカウントにユーザーを追加できます。ユーザーを簡単に追加できるようにしたいと考えています。必要なのはメール アドレスだけです。ユーザーを追加する場合、次のプロセスは安全ですか?

  1. 管理者はユーザーの追加フォームに移動します
  2. 管理者がユーザーのメール アドレスを入力し、[送信] をクリックします
  3. メール + 一意の registration_key + registration_expiration が Users モデルに入力されます
  4. 新しいユーザーには、登録へのリンクが記載されたメールが送信されます (例: http://account.myapp.com/registration/o4iwerl23msl424keree )
  5. 新しいユーザーが登録フォームを開き、必要なパスワード + password_confirm フィールドを入力します
  6. URL の registration_key が DB のものと一致し、登録の有効期限が切れる前であれば、ユーザーは登録できます。

代替案をお勧めしますか?これが安全な場合、このプロセスのステップ 2 と 3 で必要な password + password_confirmation フィールドを回避するにはどうすればよいですか?

4

1 に答える 1

2

私には十分に合理的に思えます。

User モデルに state 列を追加します。誰かを招待すると、その人が登録リンクをクリックしてすべてのことを完了するまで、招待されます。

次に、パスワードの検証 (またはこの段階では関係のないもの) を設定して、この場合は適用しないようにすることができます。

validates_presence_of :blah, :if => confirmed?

def confirmed?
  state == 'confirmed'
end

これは、どの招待されたユーザーが正常に登録されたかをユーザーが確認したい場合にも役立ちます。ユーザーが多くの状態を持つ場合、aasm gem を見たいと思うかもしれませんが、これはやり過ぎです。

于 2012-07-10T16:54:29.133 に答える