设计重定向到成功登录似乎卡在第一次登录尝试

Cod*_*ing 6 ruby ruby-on-rails devise

我正在开发一个使用 Ruby on Rails 并使用 Devise 进行身份验证的小型应用程序。我有两个登录系统设置,一个是user,另一个是employee

使用正确的电子邮件和密码登录时,设计将正确的重定向发送到返回路径,但它卡在那里。除非我刷新页面,否则什么都不会继续。但是一旦我刷新它,它会很高兴地转到重定向路径,即使在同一个浏览器选项卡中注销然后重新登录也能正常工作。但是,如果我关闭选项卡,然后在新选项卡中加载应用程序,则它不起作用。

以下是登录时的rails服务器输出,

Started POST "/employees/sign_in" for ::1 at 2020-06-21 18:21:50 +0530
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"?", "authenticity_token"=>"Pr0k+3+FfU72BcwTVRhWxQYBTD/zcv5+QBdWuovDRd4+yGxC1OBWmvAscWJbnog2vVTLpbPM2xOwVxGC3UsLRg==", "employee"=>{"email"=>"employee@example.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
  Employee Load (0.4ms)  SELECT  "employees".* FROM "employees" WHERE "employees"."email" = $1 ORDER BY "employees"."id" ASC LIMIT $2  [["email", "employee@example.com"], ["LIMIT", 1]]
  ? app/controllers/application_controller.rb:23
  CACHE Employee Load (0.0ms)  SELECT  "employees".* FROM "employees" WHERE "employees"."email" = $1 ORDER BY "employees"."id" ASC LIMIT $2  [["email", "employee@example.com"], ["LIMIT", 1]]
  ? app/controllers/application_controller.rb:23
Redirected to http://localhost:3000/employee/dashboard
Completed 302 Found in 818ms (ActiveRecord: 0.4ms)
Run Code Online (Sandbox Code Playgroud)

我不确定为什么会发生这种情况,并在尝试查找与此错误相关的任何内容时陷入死胡同。

以下是我的 after_sign_in_path 函数的代码

Started POST "/employees/sign_in" for ::1 at 2020-06-21 18:21:50 +0530
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"?", "authenticity_token"=>"Pr0k+3+FfU72BcwTVRhWxQYBTD/zcv5+QBdWuovDRd4+yGxC1OBWmvAscWJbnog2vVTLpbPM2xOwVxGC3UsLRg==", "employee"=>{"email"=>"employee@example.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
  Employee Load (0.4ms)  SELECT  "employees".* FROM "employees" WHERE "employees"."email" = $1 ORDER BY "employees"."id" ASC LIMIT $2  [["email", "employee@example.com"], ["LIMIT", 1]]
  ? app/controllers/application_controller.rb:23
  CACHE Employee Load (0.0ms)  SELECT  "employees".* FROM "employees" WHERE "employees"."email" = $1 ORDER BY "employees"."id" ASC LIMIT $2  [["email", "employee@example.com"], ["LIMIT", 1]]
  ? app/controllers/application_controller.rb:23
Redirected to http://localhost:3000/employee/dashboard
Completed 302 Found in 818ms (ActiveRecord: 0.4ms)
Run Code Online (Sandbox Code Playgroud)

这里 set_root函数返回一个带有重定向路径的字符串。

版本信息

Ruby version - ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-darwin19]
Rails version - Rails 5.2.4.2
Devise version - 4.7.1
Turbolinks - Yes
Run Code Online (Sandbox Code Playgroud)

小智 4

尝试将您的 替换form_forform_with中的sessions/new.html.erb。我有一个类似的问题(Rails 6),现在似乎没问题了。

<%= form_with(model: resource, scope: resource_name, url: session_path(resource_name)) do |f| %>
Run Code Online (Sandbox Code Playgroud)

此外,我取消了Turbolinks以下部分的注释config/initializers/devise.rb

ActiveSupport.on_load(:devise_failure_app) do
  include Turbolinks::Controller
end
Run Code Online (Sandbox Code Playgroud)