1

私の rails4 プロジェクトでは、クライアント側の検証gem (branch 4-0-beta) を使用しています。

セキュリティ上の理由から、config/initializers/client_side_validations.rb ファイルで一意性の検証を無効にしました。

ClientSideValidations::Config.disabled_validators = [:一意性]

これは正常に機能し、ユーザーの電子メールが存在するかどうかをブラウザーでテストすると、ユーザーが存在するかどうかに関係なく、500 ステータスが返されます。

http://localhost:3000/validators/uniqueness?case_sensitive=false&id=01&user[email]=tester@mail.com&_=1379052030490

(一意性が無効になっていない場合、ユーザーが一意であるかどうかに応じて、200 または 404 ステータス応答が返されます。)

HTTP ステータス コード

ただし、middleware.rb で定義されているステータス コードを正しく理解しているかどうかはわかりません。

client_side_validations / lib / client_side_validations / middleware.rb

  def call(env)
    if matches = /^\/validators\/(\w+)$/.match(env['PATH_INFO'])
      if ClientSideValidations::Config.disabled_validators.include?(matches[1].to_sym)
        [500, {'Content-Type' => 'application/json', 'Content-Length' => '0'}, ['']]
      else
        "::ClientSideValidations::Middleware::#{matches[1].camelize}".constantize.new(env).response
      end
    else
      @app.call(env)
    end
  end
end

私の理解では、ステータスコード500はサーバーエラーに使用する必要があります(「これ以上具体的なメッセージが適切でない場合に与えられる一般的なエラーメッセージ」)。ただし、この場合、一意性の検証は意図的に無効になっているため、403「禁止」または405「許可されていないメソッド」のどちらがより適切であるかを考えていましたか?

私が 500 ステータスにあまり満足していない理由は、Chrome が自動的にサーバー エラー メッセージを表示することと、client_side_validation gem が例外を発生させないためです。これはレール内でキャッチできます。Chrome のデフォルトのサーバー エラー メッセージが表示されたままです。 500 ステータス コードの場合。

この状況での適切なステータス コードまたは代替ソリューションに関するアドバイスはクールです。

4

0 に答える 0