默认Devise :: SessionsController'DELETE / users / sign_out'不注销用户

时间:2019-03-06 02:16:16

标签: ruby-on-rails devise

我有一个具有注销链接的应用程序:<%= link_to('Logout', destroy_user_session_path, method: :delete) %>

点击链接后,我的开发服务器日志中将显示以下内容:

Started DELETE "/users/sign_out" for 172.30.0.1 at 2019-03-06 14:52:49 +1300
Processing by Users::SessionsController#destroy as HTML
  Parameters: {"authenticity_token"=>"JLLEb2GSjGuYx+oBhsAkB0jcP0qZCJEUBvuH5VDmCS9Xbwe/hw085gumBPqJmWTtjyFeW1Io81n32NGxDuKjyQ=="}
  User Load (0.3ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 4 ORDER BY `users`.`id` ASC LIMIT 1
   (0.2ms)  BEGIN
   (0.4ms)  COMMIT
Redirected to https://webdev.test:3000/
Completed 302 Found in 28ms (ActiveRecord: 0.9ms) 

然后再次加载根页面,但用户尚未注销。

我在Chrome的隐身模式下打开了一个标签,并尝试登录和注销,但效果很好,所以它似乎是我的正常模式浏览器所特有的。我尝试重新启动浏览器,但没有任何作用。

我在Devise中登录的用户帐户每次都没有增加登录次数,而且update_at时间戳也没有改变。

然后我将byebug放在根页控制器方法中并运行以下命令:

   1: class HomeController < ApplicationController
   2:   def index
   3:     byebug
=> 4:     # Omitted for brevity, nothing which touches the current_user object
   5:   end
   6: end
(byebug) Devise.sign_out_all_scopes
true
(byebug) sign_out
   (0.8ms)  BEGIN
   (0.4ms)  COMMIT
true
(byebug) continue

然后确认,该用户仍未退出。

重新启动Rails应用程序并再次尝试上述所有操作均得到相同的结果,但我仍然无法将该用户注销。

以前有没有人看到过这个消息,对卡住的东西以及我如何退出有任何想法?

修改

根据评论者的要求,与sign_out有关的路由:

$ rails routes | grep sign_out
          destroy_user_session DELETE   /users/sign_out(.:format)                                   users/sessions#destroy
$ 

rails routes | grep destroy_user_session的输出也与上面的输出相同,因此它表明没有将请求定向到另一个控制器操作的命名路由。

app/controllers/users/sessions_controller.rb处的控制器(仅覆盖create方法,而不覆盖destroy方法)

class Users::SessionsController < Devise::SessionsController
  def create
    # Omitted for brevity
  end
end

1 个答案:

答案 0 :(得分:0)

我尝试并创建了用户控制器来检查,似乎一切都很好。我只有一个奇怪的问题,我不确定为什么要更改它。它是关于SQL查询的。您的响应正在获取以下查询。

SELECT  `users`.* FROM `users` WHERE `users`.`id` = 4 ORDER BY `users`.`id` ASC LIMIT 1

为什么它有4个ID硬编码,通常应该像下面这样准备语句

SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 4], ["LIMIT", 1]]

因此,为了进行调查,我将尝试使用不同的用户来登录和注销,并检查ID是否在更改。如果没有更改,那么我将调查此ID的来源以及为什么对其进行硬编码。