アクティベーションメールの再送信 - 404エラー

ユーザーがサインアップすると、アクティベーションメールは正常に機能します。しかし、サインインを試みてアクティベーションメールを再送信すると、以下の本番ログが表示されます。

Started POST "/u/action/send_activation_email" for (removed ip and timestamp)
Processing by UsersController#send_activation_email as */*
Completed 404 Not Found in 2ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 542)

このエラーは、3.2.0.beta1-devを実行しているすべてのコンテナで発生します。「production_errors.log」は空です。

再現手順:

  1. デフォルトのフォームでサインアップします。
  2. アクティベーションメールを無視して、サインインを試みます。
  3. ポップアップ「まだログインできません。以前にアクティベーションメールを送信しました…」で「アクティベーションメールを再送信」をクリックします。
  4. 「エラーが発生しました:要求されたURLまたはリソースが見つかりませんでした。」
  5. 「OK」をクリックすると、次のポップアップが表示されます。「アクティベーションメールをもう一度お送りしました…」(ただし、2通目のアクティベーションメールは実際には送信されません)

send_activation_email関数/アクションがレート制限されていることがわかりました。

def send_activation_email
    if current_user.blank? || !current_user.staff?
      RateLimiter.new(nil, "activate-hr-#{request.remote_ip}", 30, 1.hour).performed!
      RateLimiter.new(nil, "activate-min-#{request.remote_ip}", 6, 1.minute).performed!
    end

これが404エラーの原因になりますか?この問題をデバッグするために確認できる他のログはありますか?

「いいね!」 1

ローカル開発サイトでこれをテストしたところ、問題は、アカウントが作成された後に、アクティベーションメールのリンクをクリックしていないユーザーがユーザー名/パスワードでログインしようとしたときに /u/action/send_activation_email に対して行われる POST リクエストで、username または email パラメータのどちらも設定されないことのようです。

代わりに、アカウント登録直後に表示されるアカウント作成済みページから「アクティベーションメールを再送信」ボタンをクリックした場合、リクエストの username パラメータが設定されます。参考までに、機能しているボタンはこちらです。

機能しているリクエストの場合、POST リクエストのパラメータは、ユーザーがサインアップフォームを完了したときに入力した値に基づいて設定されているのではないかと推測します。

404 エラーはここでトリガーされています。

「いいね!」 1

これはバグのように思えます。

管理画面/ユーザーページからアカウントが無効化されたユーザーが、ログインを試みて「アクティベーションメールを再送信」ボタンをクリックしても、アクティベーションメールをトリガーできないという問題も発生していることを追記しておきます。

これにより、上記で報告されたものと同じエラーが発生します。

「いいね!」 2

レポートありがとうございます、@john.sanchirico、そして詳細な分析をしてくださった@simonさん :pray:

これは以下で修正されます。

「いいね!」 2

このトピックは20時間後に自動的に閉じられました。新しい返信はもう許可されていません。