Referenz: Run Data Explorer queries with the Discourse API
Wenn Parameter über die API an eine SQL-Abfrage übergeben werden, verlangt Discourse derzeit, dass alle Werte in doppelte Anführungszeichen eingeschlossen werden, einschließlich Ganzzahlen, die auf einigen Systemen (namentlich PHP’s json_encode) standardmäßig nicht eingeschlossen werden. Wenn man sich die JSON RFC ansieht, gibt es keine Anforderung, doppelte Anführungszeichen für Ganzzahlen zu verwenden. Diese Anforderung widerspricht auch der Philosophie “Sei tolerant in dem, was du akzeptierst…”
Wie kann man das reproduzieren?
-F 'params={\"user_id\":2}'
Der Server gibt einen 500 Internal Server Error zurück.
In den Fehlerprotokollen wird Folgendes angezeigt:
NoMethodError (undefined method `downcase' for 2:Integer)
app/controllers/application_controller.rb:424:in `block in with_resolved_locale'
app/controllers/application_controller.rb:424:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:35:in `call_app'
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:22:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/missing_avatars.rb:22:in `call'
lib/middleware/turbo_dev.rb:31:in `call'
lib/middleware/processing_request.rb:12:in `call'
Backtrace
plugins/discourse-data-explorer/lib/discourse_data_explorer/parameter.rb:121:in `cast_to_ruby'
...
Dieses Format funktioniert korrekt:
-F 'params={\"user_id\":\"2\"}'
Ich teile dies nicht, weil ich kleinlich bin, sondern um Zeit für jeden zu sparen, der auf ein ähnliches Problem stößt, wie ich es getan habe. Es hat eine Weile gedauert, bis ich herausgefunden habe, was das Problem verursacht hat.