janko / sequel-activerecord_connection

Allows Sequel to reuse Active Record's database connection
MIT License
127 stars 10 forks source link

Problem with argon2 and rodauth-rails #30

Closed k-graefenhain closed 1 week ago

k-graefenhain commented 1 week ago

I use rodauth-rails with argon2. When trying to create a new user I get the folloing error:

undefined method `length' for nil
app/misc/rodauth_app.rb:11:in `block in <class:RodauthApp>' 

Versions: "rails", ~> 7.0, >= 7.0.8.4 "activerecord-oracle_enhanced-adapter", ~> 7.0, >= 7.0.3 "rodauth-rails", ~> 1.15 "argon2", ~> 2.3 "sequel-activerecord_connection", >= 1.4.2

janko commented 1 week ago

Could you post the full backtrace of the error?

k-graefenhain commented 1 week ago

Started POST "/create-account" for 127.0.0.1 at 2024-09-26 11:58:32 +0200 Processing by RodauthController#create_account as HTML Parameters: {"authenticity_token"=>"[FILTERED]", "email"=>"katja.graefenhain@lu.ch", "password"=>"[FILTERED]", "password-confirm"=>"[FILTERED]", "commit"=>"Create Account"} Sequel (1.7ms) select version from PRODUCT_COMPONENT_VERSION where lower(product) like 'oracle%' ↳ app/misc/rodauth_app.rb:11:inblock in ' Sequel (2.0ms) SELECT * FROM "USERS" WHERE (("EMAIL" = 'katja.graefenhain@lu.ch') AND ("STATUS" IN (1, 2))) FETCH NEXT 1 ROWS ONLY ↳ app/misc/rodauth_app.rb:11:in `block in ' Completed 500 Internal Server Error in 78ms (ActiveRecord: 3.7ms | Allocations: 4350)

NoMethodError (undefined method `length' for nil):

app/misc/rodauth_app.rb:11:in block in <class:RodauthApp>'

janko commented 1 week ago

This is just additional logging output around this action, there are still only 2 lines of the actual error backtrace.

k-graefenhain commented 1 week ago

Do you mean this?

sequel-activerecord_connection (1.4.2) lib/sequel/extensions/activerecord_connection.rb:77:in `_trans'
sequel (5.84.0) lib/sequel/database/transactions.rb:441:in `transaction_hooks'
sequel (5.84.0) lib/sequel/database/transactions.rb:447:in `remove_transaction'
sequel (5.84.0) lib/sequel/adapters/oracle.rb:258:in `remove_transaction'
sequel (5.84.0) lib/sequel/database/transactions.rb:288:in `ensure in _transaction'
sequel (5.84.0) lib/sequel/database/transactions.rb:288:in `_transaction'
sequel (5.84.0) lib/sequel/database/transactions.rb:239:in `block in transaction'
sequel-activerecord_connection (1.4.2) lib/sequel/extensions/activerecord_connection/oracle.rb:13:in `block in synchronize'
sequel-activerecord_connection (1.4.2) lib/sequel/extensions/activerecord_connection.rb:49:in `block in synchronize'
sequel-activerecord_connection (1.4.2) lib/sequel/extensions/activerecord_connection.rb:175:in `block (2 levels) in activerecord_lock'
activesupport (7.0.8.4) lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport (7.0.8.4) lib/active_support/dependencies/interlock.rb:41:in `permit_concurrent_loads'
sequel-activerecord_connection (1.4.2) lib/sequel/extensions/activerecord_connection.rb:174:in `block in activerecord_lock'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
sequel-activerecord_connection (1.4.2) lib/sequel/extensions/activerecord_connection.rb:173:in `activerecord_lock'
sequel-activerecord_connection (1.4.2) lib/sequel/extensions/activerecord_connection.rb:42:in `synchronize'
sequel-activerecord_connection (1.4.2) lib/sequel/extensions/activerecord_connection/oracle.rb:7:in `synchronize'
sequel (5.84.0) lib/sequel/database/transactions.rb:197:in `transaction'
rodauth (2.36.0) lib/rodauth/features/base.rb:607:in `transaction'
rodauth (2.36.0) lib/rodauth/features/create_account.rb:70:in `block (4 levels) in <module:Rodauth>'
rodauth (2.36.0) lib/rodauth/features/base.rb:636:in `catch'
rodauth (2.36.0) lib/rodauth/features/base.rb:636:in `catch_error'
rodauth (2.36.0) lib/rodauth/features/create_account.rb:47:in `block (3 levels) in <module:Rodauth>'
roda (3.84.0) lib/roda/request.rb:536:in `always'
roda (3.84.0) lib/roda/plugins/pass.rb:32:in `block in always'
roda (3.84.0) lib/roda/plugins/pass.rb:32:in `catch'
roda (3.84.0) lib/roda/plugins/pass.rb:32:in `always'
roda (3.84.0) lib/roda/request.rb:527:in `_verb'
roda (3.84.0) lib/roda/request.rb:273:in `post'
rodauth (2.36.0) lib/rodauth/features/create_account.rb:42:in `block (2 levels) in <module:Rodauth>'
rodauth (2.36.0) lib/rodauth.rb:145:in `block (3 levels) in route'
rodauth (2.36.0) lib/rodauth/features/base.rb:538:in `_around_rodauth'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:12:in `block in _around_rodauth'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:21:in `block (3 levels) in rails_controller_around'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:21:in `catch'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:21:in `block (2 levels) in rails_controller_around'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/csrf.rb:41:in `block in rails_controller_callbacks'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
turbo-rails (2.0.6) lib/turbo-rails.rb:24:in `with_request_id'
turbo-rails (2.0.6) app/controllers/concerns/turbo/request_id_tracking.rb:10:in `turbo_tracking_request_id'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
actiontext (7.0.8.4) lib/action_text/rendering.rb:20:in `with_renderer'
actiontext (7.0.8.4) lib/action_text/engine.rb:69:in `block (4 levels) in <class:Engine>'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `instance_exec'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:138:in `run_callbacks'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:32:in `rails_controller_callbacks'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/csrf.rb:38:in `rails_controller_callbacks'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:20:in `block in rails_controller_around'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:37:in `rails_controller_rescue'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:19:in `rails_controller_around'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/internal_request.rb:37:in `rails_controller_around'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:12:in `_around_rodauth'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:10:in `block in _around_rodauth'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:50:in `block (2 levels) in rails_instrument_request'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:50:in `catch'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:50:in `block in rails_instrument_request'
activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.8.4) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `instrument'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:49:in `rails_instrument_request'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/internal_request.rb:42:in `rails_instrument_request'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:10:in `_around_rodauth'
rodauth (2.36.0) lib/rodauth.rb:143:in `block (2 levels) in route'
roda (3.84.0) lib/roda/request.rb:603:in `if_match'
roda (3.84.0) lib/roda/plugins/pass.rb:38:in `block in if_match'
roda (3.84.0) lib/roda/plugins/pass.rb:38:in `catch'
roda (3.84.0) lib/roda/plugins/pass.rb:38:in `if_match'
roda (3.84.0) lib/roda/request.rb:199:in `is'
rodauth (2.36.0) lib/rodauth.rb:140:in `block in route'
rodauth (2.36.0) lib/rodauth/features/base.rb:169:in `route!'
rodauth (2.36.0) lib/rodauth.rb:444:in `rodauth'
rodauth-rails (1.15.0) lib/rodauth/rails/app.rb:70:in `rodauth'
app/misc/rodauth_app.rb:11:in `block in <class:RodauthApp>'
roda (3.84.0) lib/roda.rb:522:in `_roda_run_main_route'
roda (3.84.0) lib/roda/plugins/middleware.rb:207:in `_roda_run_main_route'
roda (3.84.0) lib/roda/plugins/_before_hook.rb:27:in `_roda_run_main_route'
roda (3.84.0) lib/roda.rb:500:in `block in _roda_handle_main_route'
roda (3.84.0) lib/roda.rb:498:in `catch'
roda (3.84.0) lib/roda.rb:498:in `_roda_handle_main_route'
roda (3.84.0) lib/roda/plugins/error_handler.rb:88:in `_roda_handle_main_route'
roda (3.84.0) lib/roda.rb:384:in `block in base_rack_app_callable'
roda (3.84.0) lib/roda.rb:53:in `call'
roda (3.84.0) lib/roda/plugins/middleware.rb:159:in `block in call'
roda (3.84.0) lib/roda/plugins/middleware.rb:157:in `catch'
roda (3.84.0) lib/roda/plugins/middleware.rb:157:in `call'
rodauth-rails (1.15.0) lib/rodauth/rails/middleware.rb:18:in `block in call'
rodauth-rails (1.15.0) lib/rodauth/rails/middleware.rb:17:in `catch'
rodauth-rails (1.15.0) lib/rodauth/rails/middleware.rb:17:in `call'
rack (2.2.9) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.9) lib/rack/etag.rb:27:in `call'
rack (2.2.9) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.9) lib/rack/head.rb:12:in `call'
actionpack (7.0.8.4) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
actionpack (7.0.8.4) lib/action_dispatch/http/content_security_policy.rb:36:in `call'
rack (2.2.9) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.9) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/cookies.rb:704:in `call'
activerecord (7.0.8.4) lib/active_record/migration.rb:638:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:99:in `run_callbacks'
actionpack (7.0.8.4) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
web-console (4.2.1) lib/web_console/middleware.rb:132:in `call_app'
web-console (4.2.1) lib/web_console/middleware.rb:28:in `block in call'
web-console (4.2.1) lib/web_console/middleware.rb:17:in `catch'
web-console (4.2.1) lib/web_console/middleware.rb:17:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'
railties (7.0.8.4) lib/rails/rack/logger.rb:40:in `call_app'
railties (7.0.8.4) lib/rails/rack/logger.rb:25:in `block in call'
activesupport (7.0.8.4) lib/active_support/tagged_logging.rb:99:in `block in tagged'
activesupport (7.0.8.4) lib/active_support/tagged_logging.rb:37:in `tagged'
activesupport (7.0.8.4) lib/active_support/tagged_logging.rb:99:in `tagged'
railties (7.0.8.4) lib/rails/rack/logger.rb:25:in `call'
sprockets-rails (3.5.2) lib/sprockets/rails/quiet_assets.rb:17:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/request_id.rb:26:in `call'
rack (2.2.9) lib/rack/method_override.rb:24:in `call'
rack (2.2.9) lib/rack/runtime.rb:22:in `call'
activesupport (7.0.8.4) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/server_timing.rb:61:in `block in call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/server_timing.rb:26:in `collect_events'
actionpack (7.0.8.4) lib/action_dispatch/middleware/server_timing.rb:60:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/static.rb:23:in `call'
rack (2.2.9) lib/rack/sendfile.rb:110:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/host_authorization.rb:138:in `call'
railties (7.0.8.4) lib/rails/engine.rb:530:in `call'
puma (6.4.2) lib/puma/configuration.rb:272:in `call'
puma (6.4.2) lib/puma/request.rb:100:in `block in handle_request'
puma (6.4.2) lib/puma/thread_pool.rb:378:in `with_force_shutdown'
puma (6.4.2) lib/puma/request.rb:99:in `handle_request'
puma (6.4.2) lib/puma/server.rb:464:in `process_client'
puma (6.4.2) lib/puma/server.rb:245:in `block in run'
puma (6.4.2) lib/puma/thread_pool.rb:155:in `block in spawn_thread' 
janko commented 1 week ago

Thanks, that was what I needed 👍🏻 It seems that sequel-activerecord_connection doesn't handle adapters that don't support savepoints, like it seems to be the case with Oracle. I will work on a fix, and moving this issue to the appropriate repo.

janko commented 1 week ago

I pushed a potential fix to the sequel-activerecord_connection master branch, would you mind testing it out?

k-graefenhain commented 1 week ago

Still get the same error :(

k-graefenhain commented 1 week ago

backtrace now is:

stmt.c:265:in oci8lib_330.so
ruby-oci8-2.2.13-x64-mingw (ucrt) lib/oci8/cursor.rb:137:in `exec'
ruby-oci8-2.2.13-x64-mingw (ucrt) lib/oci8/oci8.rb:271:in `exec_internal'
ruby-oci8-2.2.13-x64-mingw (ucrt) lib/oci8/oci8.rb:262:in `exec'
activerecord-oracle_enhanced-adapter (7.0.3) lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb:445:in `block in exec'
activerecord-oracle_enhanced-adapter (7.0.3) lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb:433:in `with_retry'
activerecord-oracle_enhanced-adapter (7.0.3) lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb:445:in `exec'
sequel (5.84.0) lib/sequel/adapters/oracle.rb:93:in `block (2 levels) in _execute'
sequel (5.84.0) lib/sequel/database/logging.rb:38:in `log_connection_yield'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:59:in `block in log_connection_yield'
activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.8.4) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `instrument'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:197:in `activerecord_log'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:59:in `log_connection_yield'
sequel (5.84.0) lib/sequel/adapters/oracle.rb:93:in `block in _execute'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection/oracle.rb:13:in `block in synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:49:in `block in synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:178:in `block (2 levels) in activerecord_lock'
activesupport (7.0.8.4) lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport (7.0.8.4) lib/active_support/dependencies/interlock.rb:41:in `permit_concurrent_loads'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:177:in `block in activerecord_lock'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:176:in `activerecord_lock'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:42:in `synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection/oracle.rb:7:in `synchronize'
sequel (5.84.0) lib/sequel/adapters/oracle.rb:84:in `_execute'
sequel (5.84.0) lib/sequel/adapters/oracle.rb:73:in `execute_insert'
sequel (5.84.0) lib/sequel/dataset/actions.rb:1205:in `execute_insert'
sequel (5.84.0) lib/sequel/adapters/shared/oracle.rb:663:in `execute_insert'
sequel (5.84.0) lib/sequel/dataset/actions.rb:423:in `insert'
rodauth (2.36.0) lib/rodauth/features/create_account.rb:102:in `block in save_account'
sequel (5.84.0) lib/sequel/database/transactions.rb:235:in `block in transaction'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection/oracle.rb:13:in `block in synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:49:in `block in synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:178:in `block (2 levels) in activerecord_lock'
activesupport (7.0.8.4) lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport (7.0.8.4) lib/active_support/dependencies/interlock.rb:41:in `permit_concurrent_loads'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:177:in `block in activerecord_lock'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:176:in `activerecord_lock'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:42:in `synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection/oracle.rb:7:in `synchronize'
sequel (5.84.0) lib/sequel/database/transactions.rb:197:in `transaction'
rodauth (2.36.0) lib/rodauth/features/base.rb:607:in `transaction'
rodauth (2.36.0) lib/rodauth/features/base.rb:828:in `raises_uniqueness_violation?'
rodauth (2.36.0) lib/rodauth/features/create_account.rb:102:in `save_account'
rodauth (2.36.0) lib/rodauth/features/create_account.rb:72:in `block (5 levels) in <module:Rodauth>'
sequel (5.84.0) lib/sequel/database/transactions.rb:264:in `_transaction'
sequel (5.84.0) lib/sequel/database/transactions.rb:239:in `block in transaction'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection/oracle.rb:13:in `block in synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:49:in `block in synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:178:in `block (2 levels) in activerecord_lock'
activesupport (7.0.8.4) lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport (7.0.8.4) lib/active_support/dependencies/interlock.rb:41:in `permit_concurrent_loads'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:177:in `block in activerecord_lock'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.8.4) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:176:in `activerecord_lock'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection.rb:42:in `synchronize'
sequel-activerecord_connection (dd89ce9885d1) lib/sequel/extensions/activerecord_connection/oracle.rb:7:in `synchronize'
sequel (5.84.0) lib/sequel/database/transactions.rb:197:in `transaction'
rodauth (2.36.0) lib/rodauth/features/base.rb:607:in `transaction'
rodauth (2.36.0) lib/rodauth/features/create_account.rb:70:in `block (4 levels) in <module:Rodauth>'
rodauth (2.36.0) lib/rodauth/features/base.rb:636:in `catch'
rodauth (2.36.0) lib/rodauth/features/base.rb:636:in `catch_error'
rodauth (2.36.0) lib/rodauth/features/create_account.rb:47:in `block (3 levels) in <module:Rodauth>'
roda (3.84.0) lib/roda/request.rb:536:in `always'
roda (3.84.0) lib/roda/plugins/pass.rb:32:in `block in always'
roda (3.84.0) lib/roda/plugins/pass.rb:32:in `catch'
roda (3.84.0) lib/roda/plugins/pass.rb:32:in `always'
roda (3.84.0) lib/roda/request.rb:527:in `_verb'
roda (3.84.0) lib/roda/request.rb:273:in `post'
rodauth (2.36.0) lib/rodauth/features/create_account.rb:42:in `block (2 levels) in <module:Rodauth>'
rodauth (2.36.0) lib/rodauth.rb:145:in `block (3 levels) in route'
rodauth (2.36.0) lib/rodauth/features/base.rb:538:in `_around_rodauth'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:12:in `block in _around_rodauth'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:21:in `block (3 levels) in rails_controller_around'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:21:in `catch'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:21:in `block (2 levels) in rails_controller_around'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/csrf.rb:41:in `block in rails_controller_callbacks'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
turbo-rails (2.0.6) lib/turbo-rails.rb:24:in `with_request_id'
turbo-rails (2.0.6) app/controllers/concerns/turbo/request_id_tracking.rb:10:in `turbo_tracking_request_id'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
actiontext (7.0.8.4) lib/action_text/rendering.rb:20:in `with_renderer'
actiontext (7.0.8.4) lib/action_text/engine.rb:69:in `block (4 levels) in <class:Engine>'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `instance_exec'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:138:in `run_callbacks'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:32:in `rails_controller_callbacks'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/csrf.rb:38:in `rails_controller_callbacks'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:20:in `block in rails_controller_around'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:37:in `rails_controller_rescue'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:19:in `rails_controller_around'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/internal_request.rb:37:in `rails_controller_around'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/callbacks.rb:12:in `_around_rodauth'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:10:in `block in _around_rodauth'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:50:in `block (2 levels) in rails_instrument_request'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:50:in `catch'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:50:in `block in rails_instrument_request'
activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.8.4) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `instrument'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:49:in `rails_instrument_request'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/internal_request.rb:42:in `rails_instrument_request'
rodauth-rails (1.15.0) lib/rodauth/rails/feature/instrumentation.rb:10:in `_around_rodauth'
rodauth (2.36.0) lib/rodauth.rb:143:in `block (2 levels) in route'
roda (3.84.0) lib/roda/request.rb:603:in `if_match'
roda (3.84.0) lib/roda/plugins/pass.rb:38:in `block in if_match'
roda (3.84.0) lib/roda/plugins/pass.rb:38:in `catch'
roda (3.84.0) lib/roda/plugins/pass.rb:38:in `if_match'
roda (3.84.0) lib/roda/request.rb:199:in `is'
rodauth (2.36.0) lib/rodauth.rb:140:in `block in route'
rodauth (2.36.0) lib/rodauth/features/base.rb:169:in `route!'
rodauth (2.36.0) lib/rodauth.rb:444:in `rodauth'
rodauth-rails (1.15.0) lib/rodauth/rails/app.rb:70:in `rodauth'
app/misc/rodauth_app.rb:11:in `block in <class:RodauthApp>'
roda (3.84.0) lib/roda.rb:522:in `_roda_run_main_route'
roda (3.84.0) lib/roda/plugins/middleware.rb:207:in `_roda_run_main_route'
roda (3.84.0) lib/roda/plugins/_before_hook.rb:27:in `_roda_run_main_route'
roda (3.84.0) lib/roda.rb:500:in `block in _roda_handle_main_route'
roda (3.84.0) lib/roda.rb:498:in `catch'
roda (3.84.0) lib/roda.rb:498:in `_roda_handle_main_route'
roda (3.84.0) lib/roda/plugins/error_handler.rb:88:in `_roda_handle_main_route'
roda (3.84.0) lib/roda.rb:384:in `block in base_rack_app_callable'
roda (3.84.0) lib/roda.rb:53:in `call'
roda (3.84.0) lib/roda/plugins/middleware.rb:159:in `block in call'
roda (3.84.0) lib/roda/plugins/middleware.rb:157:in `catch'
roda (3.84.0) lib/roda/plugins/middleware.rb:157:in `call'
rodauth-rails (1.15.0) lib/rodauth/rails/middleware.rb:18:in `block in call'
rodauth-rails (1.15.0) lib/rodauth/rails/middleware.rb:17:in `catch'
rodauth-rails (1.15.0) lib/rodauth/rails/middleware.rb:17:in `call'
rack (2.2.9) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.9) lib/rack/etag.rb:27:in `call'
rack (2.2.9) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.9) lib/rack/head.rb:12:in `call'
actionpack (7.0.8.4) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
actionpack (7.0.8.4) lib/action_dispatch/http/content_security_policy.rb:36:in `call'
rack (2.2.9) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.9) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/cookies.rb:704:in `call'
activerecord (7.0.8.4) lib/active_record/migration.rb:638:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (7.0.8.4) lib/active_support/callbacks.rb:99:in `run_callbacks'
actionpack (7.0.8.4) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
web-console (4.2.1) lib/web_console/middleware.rb:132:in `call_app'
web-console (4.2.1) lib/web_console/middleware.rb:28:in `block in call'
web-console (4.2.1) lib/web_console/middleware.rb:17:in `catch'
web-console (4.2.1) lib/web_console/middleware.rb:17:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'
railties (7.0.8.4) lib/rails/rack/logger.rb:40:in `call_app'
railties (7.0.8.4) lib/rails/rack/logger.rb:25:in `block in call'
activesupport (7.0.8.4) lib/active_support/tagged_logging.rb:99:in `block in tagged'
activesupport (7.0.8.4) lib/active_support/tagged_logging.rb:37:in `tagged'
activesupport (7.0.8.4) lib/active_support/tagged_logging.rb:99:in `tagged'
railties (7.0.8.4) lib/rails/rack/logger.rb:25:in `call'
sprockets-rails (3.5.2) lib/sprockets/rails/quiet_assets.rb:17:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/request_id.rb:26:in `call'
rack (2.2.9) lib/rack/method_override.rb:24:in `call'
rack (2.2.9) lib/rack/runtime.rb:22:in `call'
activesupport (7.0.8.4) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/server_timing.rb:61:in `block in call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/server_timing.rb:26:in `collect_events'
actionpack (7.0.8.4) lib/action_dispatch/middleware/server_timing.rb:60:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/static.rb:23:in `call'
rack (2.2.9) lib/rack/sendfile.rb:110:in `call'
actionpack (7.0.8.4) lib/action_dispatch/middleware/host_authorization.rb:138:in `call'
railties (7.0.8.4) lib/rails/engine.rb:530:in `call'
puma (6.4.2) lib/puma/configuration.rb:272:in `call'
puma (6.4.2) lib/puma/request.rb:100:in `block in handle_request'
puma (6.4.2) lib/puma/thread_pool.rb:378:in `with_force_shutdown'
puma (6.4.2) lib/puma/request.rb:99:in `handle_request'
puma (6.4.2) lib/puma/server.rb:464:in `process_client'
puma (6.4.2) lib/puma/server.rb:245:in `block in run'
puma (6.4.2) lib/puma/thread_pool.rb:155:in `block in spawn_thread' 
janko commented 1 week ago

The error is now in a different place, is the error message/class different?

k-graefenhain commented 1 week ago

Oh sorry. No, same place but different error:

Sequel::NotNullConstraintViolation (OCIError: ORA-01400: cannot insert NULL into ("EINSATZPLANUNG"."USERS"."ID")): app/misc/rodauth_app.rb:11:in `block in '

janko commented 1 week ago

The r.rodauth call in the Rodauth app internally handles all Rodauth endpoints, so most errors will come from that line 😉

What does the attempted INSERT statement look like? It appears that Oracle doesn't see the users.id column as auto-incrementing that it should auto-fill on insert.

k-graefenhain commented 1 week ago

Hmm, creating a user from the rails console works. With rodauth the statement is: INSERT INTO "USERS" ("EMAIL", "STATUS", "PASSWORD_HASH") VALUES ('katja.graefenhain@lu.ch', 1, '$argon2id$v=19$m=65536,t=2,p=1$Cc2kbbk8sI2sNUy47MQXLQ$HM5Zg/mTNFaJYK9SHDY4ZikOi51r1eHrz3ud/InyIpk')

Seems like id, created_at, updated_at are missing.

janko commented 1 week ago

The id column is expected to be missing, since it's supposed to be an auto-incrementing column that the database populates. Is that not the case for your database?

If your application needs to populate the ID column, you can do that before Rodauth saves the account:

before_create_account do
  account[:id] = SecureRandom.uuid # for example
  account[:created_at] = Time.now
  account[:updated_at] = Time.now
end

Timestamps need to be set explicitly as well, because those normally get set on the Active Record model level, but Rodauth uses Sequel which skips Active Record models (it only uses Active Record's DB connection).

k-graefenhain commented 1 week ago

The id column should be an auto-incrementing column from the database. The table was created with the rodauth rails migration. There also is a USERS_SEQ on the database.

The only thing we changed is renaming accounts to users in rodauth_main.rb: # Change prefix of table and foreign key column names from default "account" accounts_table :users verify_account_table :user_verification_keys verify_login_change_table :user_login_change_keys reset_password_table :user_password_reset_keys remember_table :user_remember_keys

janko commented 1 week ago

Any idea then why is your database complaining that users.id is NULL on insertion? Rodauth behaves as expected here, it leaves the id column unset, so everything should work then, right? Does the user creation work when perfoming it through the Active Record model? If yes, does AR generate a different INSERT statement?

k-graefenhain commented 1 week ago

I don't know how to get the SQL statement when inserting a user with AR... (when creating a user in the console AR is used, right?)

However, since creation also does not work in SQL developer: how is the sequence connected with the table? Maybe a trigger is needed??

janko commented 1 week ago

I don't know, I have zero experience with the Oracle database. I will close this issue, because the sequel-activerecord_connection bug has been fixed (I will cut a release shortly), it appears unrelated to argon2, and rodauth/rodauth-rails aren't doing anything unexpected.

k-graefenhain commented 1 week ago

Thanks anyway! When adding database triggers inserting works. However I get an error "invalid email" (even if the record is saved to the database) from rodauth. Do you think that's a rodauth bug? No error, just a validation message..

janko commented 1 week ago

Not sure what's up with that, I suggest you open a new issue with the necessary information (SQL logs, backtrace if applicable, email value etc).