在没有电子邮件确认的情况下尝试登录时,处理Devise::SessionsController中的ActionContr



我是铁路行业的新手,我面临着这个问题:

在邀请新成员之后,系统生成邀请链接。此链接邀请新成员创建帐户,一旦创建帐户,新成员需要确认其电子邮件,但如果成员尝试在未确认其电子邮件的情况下登录,则会得到:

ActionController::UnknownFormat in Devise::SessionsController#new Extracted source (around line #215):

(options.delete(:responder) || self.class.responder).call(self, resources, options)
else
raise ActionController::UnknownFormat
end
end

我尝试了几种解决方案,如:

  • respond_to :json, :html添加到ApplicationController.rb

  • 或更换:form_for(resource, as: resource_name, url: user_registration_path(resource_name))

带有:

form_for(resource, as: resource_name, url: user_registration_path)views/devise/sessions/new.html.rb.

运气不好。我们将非常感谢您的帮助。

事先非常感谢。J.

更新:

这是带有令牌的邀请链接:lvh.me:5000/users/sign_up?invite=mHQFJ65qcgtcGNPfzNBd1DX6

这是用户尝试登录而不是创建帐户时失败之前的链接:lvh.me:5000/users/sign_in

这是失败后的链接:lvh.me:5000/users/sign_in.js

日志:

10:01:09 web.1     | Started POST "/users/sign_in" for 127.0.0.1 at 2022-08-13 10:01:09 +0200
10:01:09 web.1     | Pipelining commands on a Redis instance is deprecated and will be removed in Redis 5.0.0.
10:01:09 web.1     |
10:01:09 web.1     | redis.pipelined do
10:01:09 web.1     |   redis.get("key")
10:01:09 web.1     | end
10:01:09 web.1     |
10:01:09 web.1     | should be replaced by
10:01:09 web.1     |
10:01:09 web.1     | redis.pipelined do |pipeline|
10:01:09 web.1     |   pipeline.get("key")
10:01:09 web.1     | end
10:01:09 web.1     |
10:01:09 web.1     | (called from /home/julio/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/flipper-redis-0.23.1/lib/flipper/adapters/redis.rb:133:in `docs_for'}
10:01:09 web.1     | Processing by Devise::SessionsController#create as JS
10:01:09 web.1     |   Parameters: {"authenticity_token"=>"v3QNvlX3kS9rYuQvijSzzl64EWnADRxjUicS181rQIAqeD/cX/Mmk5+VTc/RqZXuL/cMK8zzn8Xdrb/v0BBgtg==", "user"=>{"email"=>"[FILTERED]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log In"}
10:01:09 web.1     |   User Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."email" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["email", "benavides+5@rocketmail.com"], ["LIMIT", 1]]
10:01:09 web.1     |   ↳ app/controllers/concerns/set_current_request_details.rb:15:in `set_request_details'
10:01:10 web.1     | Completed 401 Unauthorized in 165ms (ActiveRecord: 1.0ms | Allocations: 3959)
10:01:10 web.1     |
10:01:10 web.1     |
10:01:10 web.1     | Started GET "/users/sign_in.js" for 127.0.0.1 at 2022-08-13 10:01:10 +0200
10:01:10 web.1     | Pipelining commands on a Redis instance is deprecated and will be removed in Redis 5.0.0.
10:01:10 web.1     |
10:01:10 web.1     | redis.pipelined do
10:01:10 web.1     |   redis.get("key")
10:01:10 web.1     | end
10:01:10 web.1     |
10:01:10 web.1     | should be replaced by
10:01:10 web.1     |
10:01:10 web.1     | redis.pipelined do |pipeline|
10:01:10 web.1     |   pipeline.get("key")
10:01:10 web.1     | end
10:01:10 web.1     |
10:01:10 web.1     | (called from /home/julio/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/flipper-redis-0.23.1/lib/flipper/adapters/redis.rb:133:in `docs_for'}
10:01:10 web.1     | Processing by Devise::SessionsController#new as JS
10:01:10 web.1     | Completed 406 Not Acceptable in 3ms (ActiveRecord: 0.0ms | Allocations: 1899)
10:01:10 web.1     |
10:01:10 web.1     |
10:01:10 web.1     |
10:01:10 web.1     | ActionController::UnknownFormat (ActionController::UnknownFormat):
10:01:10 web.1     |
10:01:10 web.1     | responders (3.0.1) lib/action_controller/respond_with.rb:215:in `respond_with'
10:01:10 web.1     | devise (e16d60d0fedc) app/controllers/devise/sessions_controller.rb:14:in `new'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
10:01:10 web.1     | actionpack (6.0.4.6) lib/abstract_controller/base.rb:195:in `process_action'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_controller/metal/rendering.rb:30:in `process_action'
10:01:10 web.1     | actionpack (6.0.4.6) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/callbacks.rb:112:in `block in run_callbacks'
10:01:10 web.1     | rorvswild (1.5.13) lib/rorvswild/plugin/action_controller.rb:28:in `around_action'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/callbacks.rb:121:in `instance_exec'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/callbacks.rb:121:in `block in run_callbacks'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/callbacks.rb:139:in `run_callbacks'
10:01:10 web.1     | actionpack (6.0.4.6) lib/abstract_controller/callbacks.rb:41:in `process_action'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_controller/metal/rescue.rb:22:in `process_action'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/notifications.rb:180:in `block in instrument'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/notifications.rb:180:in `instrument'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
10:01:10 web.1     | activerecord (6.0.4.6) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
10:01:10 web.1     | actionpack (6.0.4.6) lib/abstract_controller/base.rb:136:in `process'
10:01:10 web.1     | actionview (6.0.4.6) lib/action_view/rendering.rb:39:in `process'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_controller/metal.rb:190:in `dispatch'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_controller/metal.rb:254:in `dispatch'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/routing/route_set.rb:33:in `serve'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/routing/mapper.rb:48:in `serve'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/journey/router.rb:49:in `block in serve'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/journey/router.rb:32:in `each'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/journey/router.rb:32:in `serve'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/routing/route_set.rb:834:in `call'
10:01:10 web.1     | turnout (2.5.0) lib/rack/turnout.rb:25:in `call'
10:01:10 web.1     | flipper (0.23.1) lib/flipper/middleware/memoizer.rb:77:in `memoized_call'
10:01:10 web.1     | flipper (0.23.1) lib/flipper/middleware/memoizer.rb:42:in `call'
10:01:10 web.1     | bullet (7.0.1) lib/bullet/rack.rb:15:in `call'
10:01:10 web.1     | warden (1.2.9) lib/warden/manager.rb:36:in `block in call'
10:01:10 web.1     | warden (1.2.9) lib/warden/manager.rb:34:in `catch'
10:01:10 web.1     | warden (1.2.9) lib/warden/manager.rb:34:in `call'
10:01:10 web.1     | rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
10:01:10 web.1     | rack (2.2.3) lib/rack/etag.rb:27:in `call'
10:01:10 web.1     | rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'
10:01:10 web.1     | rack (2.2.3) lib/rack/head.rb:12:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
10:01:10 web.1     | rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
10:01:10 web.1     | rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/cookies.rb:654:in `call'
10:01:10 web.1     | activerecord (6.0.4.6) lib/active_record/migration.rb:567:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/callbacks.rb:101:in `run_callbacks'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/executor.rb:14:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
10:01:10 web.1     | web-console (4.2.0) lib/web_console/middleware.rb:132:in `call_app'
10:01:10 web.1     | web-console (4.2.0) lib/web_console/middleware.rb:28:in `block in call'
10:01:10 web.1     | web-console (4.2.0) lib/web_console/middleware.rb:17:in `catch'
10:01:10 web.1     | web-console (4.2.0) lib/web_console/middleware.rb:17:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'10:01:10 web.1     | turbolinks_render (0.9.21) lib/turbolinks_render/middleware.rb:81:in `call'
10:01:10 web.1     | railties (6.0.4.6) lib/rails/rack/logger.rb:37:in `call_app'
10:01:10 web.1     | railties (6.0.4.6) lib/rails/rack/logger.rb:26:in `block in call'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/tagged_logging.rb:80:in `block in tagged'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/tagged_logging.rb:28:in `tagged'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/tagged_logging.rb:80:in `tagged'
10:01:10 web.1     | railties (6.0.4.6) lib/rails/rack/logger.rb:26:in `call'
10:01:10 web.1     | sprockets-rails (3.4.2) lib/sprockets/rails/quiet_assets.rb:13:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
10:01:10 web.1     | request_store (1.5.1) lib/request_store/middleware.rb:19:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/request_id.rb:27:in `call'
10:01:10 web.1     | rack (2.2.3) lib/rack/method_override.rb:24:in `call'
10:01:10 web.1     | rack (2.2.3) lib/rack/runtime.rb:22:in `call'
10:01:10 web.1     | activesupport (6.0.4.6) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/executor.rb:14:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/static.rb:126:in `call'
10:01:10 web.1     | rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
10:01:10 web.1     | actionpack (6.0.4.6) lib/action_dispatch/middleware/host_authorization.rb:97:in `call'
10:01:10 web.1     | rorvswild (1.5.13) lib/rorvswild/plugin/middleware.rb:20:in `call'
10:01:10 web.1     | honeybadger (4.10.0) lib/honeybadger/rack/error_notifier.rb:33:in `block in call'
10:01:10 web.1     | honeybadger (4.10.0) lib/honeybadger/agent.rb:426:in `with_rack_env'
10:01:10 web.1     | honeybadger (4.10.0) lib/honeybadger/rack/error_notifier.rb:30:in `call'
10:01:10 web.1     | honeybadger (4.10.0) lib/honeybadger/rack/user_feedback.rb:31:in `call'
10:01:10 web.1     | honeybadger (4.10.0) lib/honeybadger/rack/user_informer.rb:21:in `call'
10:01:10 web.1     | webpacker (5.4.3) lib/webpacker/dev_server_proxy.rb:25:in `perform_request'
10:01:10 web.1     | rack-proxy (0.7.2) lib/rack/proxy.rb:67:in `call'
10:01:10 web.1     | railties (6.0.4.6) lib/rails/engine.rb:527:in `call'
10:01:10 web.1     | puma (4.3.11) lib/puma/configuration.rb:228:in `call'
10:01:10 web.1     | puma (4.3.11) lib/puma/server.rb:718:in `handle_request'
10:01:10 web.1     | puma (4.3.11) lib/puma/server.rb:472:in `process_client'
10:01:10 web.1     | puma (4.3.11) lib/puma/server.rb:328:in `block in run'
10:01:10 web.1     | puma (4.3.11) lib/puma/thread_pool.rb:134:in `block in spawn_thread'

ApplicationController不需要额外的respond_to块,您的问题来自默认情况下位于gem内部的Devise::SessionsController#new,除非您已经为自己生成了它,在这种情况下您可能应该这样做。

此外,在Github上检查Devise,Devise::SessionsController#new没有第215行,也没有包含上面显示的代码。

意思是:

  1. 问题实际上来自堆栈中的某个更深层次

向我们展示更多日志,尝试获得完整的堆栈跟踪,给我们一个电子邮件中生成的链接的例子,链接试图访问的路径是什么?该路径中包含哪些变量?

  1. 电子邮件确认落入Devise::Confirmable

所以问题实际上在于如何设置Devise::Confirmable。请务必查找有关此特定功能的Wiki。就像这个:https://github.com/heartcombo/devise/wiki/How-To:-添加-:可向用户确认

我还会尝试生成SessionsController,然后在#new方法的顶部添加一个调试器,并逐行查看错误的实际发生位置。

更新

我认为controllers/concerns/set_current_request_details.rb中的某些内容正在将您的登录请求从HTML变形为JS。

如您的评论所示:

这是带有令牌的邀请链接:lvh.me:5000/users/sign_up?invit=mHQFJ65qcgtcGNPfzNBd1DX6这是用户尝试登录而不是创建帐户时失败前的链接:lvh.me:5000/users/sign_in这是失败后的链接:lvh.me:500/users/sign_in.js

并且Devise::SessionsController#new不知道如何响应JS。

最新更新