首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认设计:SessionsController 'DELETE /user/ signing‘不签出用户

默认设计:SessionsController 'DELETE /user/ signing‘不签出用户
EN

Stack Overflow用户
提问于 2019-03-06 02:16:15
回答 2查看 165关注 0票数 0

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

单击链接后,可以在开发服务器日志中获得以下内容:

代码语言:javascript
复制
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中打开了一个匿名模式的选项卡,并尝试登录和注销,它运行良好,因此它似乎是我的正常模式浏览器特有的东西。我试过重新启动浏览器,但没有什么不同。

当我这样做时,我被登录的用户帐户并没有增加它的登录计数,updated_at时间戳也没有改变。

然后,我将byebug放入根页控制器方法中,并运行以下操作:

代码语言:javascript
复制
   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相关的路线:

代码语言:javascript
复制
$ 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上的控制器(它只覆盖创建方法,而不是破坏方法)

代码语言:javascript
复制
class Users::SessionsController < Devise::SessionsController
  def create
    # Omitted for brevity
  end
end
EN

回答 2

Stack Overflow用户

发布于 2019-03-06 06:03:52

我尝试并创建了用户控制器来检查,并且看起来一切都很好。我只有一个奇怪的问题,我不知道为什么要改变它。它是关于SQL查询的。您的响应将得到以下查询。

代码语言:javascript
复制
SELECT  `users`.* FROM `users` WHERE `users`.`id` = 4 ORDER BY `users`.`id` ASC LIMIT 1

为什么它有4个id作为硬编码,通常应该准备如下所示的语句

代码语言:javascript
复制
SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 4], ["LIMIT", 1]]

因此,为了进行调查,我将尝试使用不同的用户查看登录和注销,并检查ID是否正在更改。如果它没有改变,那么我将调查这个ID来自哪里,以及为什么它是硬编码的。

票数 0
EN

Stack Overflow用户

发布于 2022-09-27 06:06:19

更改为按钮而不是链接为我解决了这个问题,<%= button_to 'Exit', destroy_user_session_path, method: :delete %>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55014517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档