当前位置:  开发笔记 > 编程语言 > 正文

设计:为什么我的注销链接不起作用?

如何解决《设计:为什么我的注销链接不起作用?》经验,为你挑选了4个好方法。

问题:简而言之,当我尝试向我的应用程序安装注销链接时,它无法正常工作.这里有我认为放在这里的背景(如果你想要别的什么,请戳我)......

我在haml视图中得到了这个:

= link_to("Logout", destroy_user_session_path, :method => :delete)

它在视图中生成:

Logout

我在我的config/initializers/devise.rb中验证了我的设置没有注释并且正确:

config.sign_out_via = :delete

我验证了以下路线:

destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"}

我的routes.rb中也有这点诡计,我怀疑这与我的问题有关:

devise_for :users, :controllers => {:sessions => "devise/sessions", :registrations => "users"}
resources :users

最后一点是因为我想在自己的控制器中管理(编辑,创建和删除)用户.

我得到的错误信息如下:

ActiveRecord::RecordNotFound in UsersController#show

Couldn't find User with ID=sign_out
Rails.root: /home/jaydel/projects/mbsquared-projects/Wilson-Goldrick

app/controllers/users_controller.rb:16:in `show'

在我的服务器日志中,我看到了这个请求:

Started GET "/users/sign_out" for 127.0.0.1 at 2011-08-04 13:08:51 -0500
  Processing by UsersController#show as HTML
  Parameters: {"id"=>"sign_out"}

有人有主意吗?



1> 小智..:

解决这个问题的正确方法(REST方式)是更改注销链接以使用DELETE方法.这是一个非常简单的修复,改变了这个:

link_to "Log out", destroy_user_session_path

对此:

link_to "Log out", destroy_user_session_path, :method => :delete 



2> ka8725..:

当我application.js从这一行删除时,我遇到了与rails 3.2相同的问题:

//= require jquery_ujs

所以,application.js如果你没有它,我认为你必须在你的行中插入这一行.

PS.此行为意味着rails适配器jquery不起作用.因此,您应确保它是否已在浏览器中的html中加载.您应该在开发模式下测试它,因为您将在生产中使用压缩的js,并且在那里找到一些东西将非常困难.


非常感谢这篇文章和解决方案.我在这个确切的问题上花了至少10小时,而且我完全不知道它来自哪里(这是问题,错误没有帮助)!
不仅是// =需要jquery_ujs,而且// =还需要jquery

3> Olives..:

问题在于,在您的日志中,注销请求是GET请求.

Started GET "/users/sign_out"

但是注销路线是DELETE

destroy_user_session DELETE /users/sign_out(.:format) 

为什么你越来越异常的原因是它越来越与创造的途径之一混淆resources :users这会是这样的

edit_user GET /users/(:id)(.:format) {:action=>"edit", :controller=>"users"}

基本上'sign_out'被误认为是id.

我不确定删除链接为什么不作为DELETE请求进行.虽然在改变

config.sign_out_via = :delete

:get可以解决的问题.


这不是一个好主意.您正在启用CSRF攻击.当状态发生变化时,应使用POST和DELETE.确保您的布局中包含`jquery_ujs.js`
是的,我把他的答案读作"它应该删除,而不是得到,但如果你坚持这样做,这可能会有效".我改变它删除,世界是一个更幸福的地方.

4> webgen..:

你需要两者
link_to "Log out", destroy_user_session_path, method: :delete

&&这些包含在application.js中

//= require jquery
//= require jquery_ujs

.显然,如果由于某种原因它不存在,请不要忘记将其添加到Gemfile.

gem 'jquery-rails'

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有