gpt4 book ai didi

ruby-on-rails - 设计销毁 session 不会销毁 session ?

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:58 24 4
gpt4 key购买 nike

真正的新设计 - 老实说,这非常令人沮丧......

我的用户 session 没有被破坏。

这是我的导航栏中的链接:

<li><%= link_to 'Logout', destroy_user_session_path, :method => :delete %></li>

devise.rb 配置了 :delete 方法:

# The default HTTP method used to sign out a resource. Default is :delete.
config.sign_out_via = :delete

路线是:

  destroy_user_session DELETE /users/sign_out(.:format)             sessions#destroy

应用程序 Controller 说:

class ApplicationController < ActionController::Base
protect_from_forgery

private
def after_sign_out_path_for(resource_or_scope)
root_path
end

我点击退出链接,我的控制台显示:

Started GET "/users/sign_out" for 127.0.0.1 at 2014-04-18 12:00:26 -0500
Processing by UsersController#show as HTML
Parameters: {"id"=>"sign_out"}
MONGODB (0.8ms) waittext_development['users'].find({:_id=>BSON::ObjectId('53515685963e6507ad00003e')}).limit(-1)

它似乎没有找到事件 session (我沮丧地点击了十几次),但问题是我登陆的页面 - UsersController#show - 不是我告诉它的页面路由到。它应该是 root_path 即 users#index

所以我在 users#show 上遇到了所有这些 nil 类错误,因为它试图渲染默认的 rails @user.name 等,而 @user 没有定义——我最终手动覆盖了 show Action 以简单地渲染'index',我最终出现在我的索引页面上 - 但仍然 - 我看到 current_user.email 打印在这里:

<% if user_signed_in? -%>
<ul>
<li><%= current_user.email %></li>
<li><%= link_to 'My info', edit_user_registration_path %></li>
<li><%= link_to 'Sign out', destroy_user_session_path %></li>
</ul>

它的计算结果为 TRUE,我得到了这三个列表项。

用户不应登录,因为我刚刚破坏了 session !

这到底是怎么回事?

最佳答案

您发出一个 GET 请求,而不是一个 DELETE(或者甚至是一个设置了 _method 参数的 POST 来模拟一个正确的 删除)。因此,您的请求被路由到 UsersController#show,它监听 GET/users/:id

原因是,普通的 HTML 链接通常只能导致 GET 请求。对于其他任何事情,您都需要一个表格。如果现在将 :method 参数传递给 View 中的 link_to 方法,Rails 将生成一些 Javascript,它捕获链接上的点击以生成表单并发送请求那样。如果用户禁用了 Javascript,这将失败,这里似乎就是这种情况。

因此,您应该确保所有用户(包括您)都启用了 Javascript,或者使用 button_to 之类的东西来代替,这将在 HTML 中创建一个无需 Javascript 即可工作的正确表单。

关于ruby-on-rails - 设计销毁 session 不会销毁 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23158789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com