簡體   English   中英

無法使用Devise gem在Rails應用中注銷,沒有路線與/ users / sign_out匹配

[英]Unable to sign out in a Rails app, using Devise gem, no route matches /users/sign_out

我知道在不同的站點上有很多關於此問題的問題。 我已經嘗試了很多事情,但仍然無法使用DELETE方法進行鏈接。

我創建了一個空的Rails應用程序

版本:

  • 設計2.0.4
  • 導軌:3.2.2
  • 紅寶石:1.9.2
  • RVM:1.10.3

安裝devise gem之后,我運行了以下命令:

rails generate devise:install
rails generate devise User

我嘗試過的修復方法如下:

初始鏈接:

<%= link_to "Sign out", destroy_user_session_path %>

我添加了delete方法,但沒有刻度:

<%= link_to "Sign out", destroy_user_session_path, :method => 'delete' %>
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

將此添加到application.html.erb:

<%= javascript_include_tag :defaults %>

我在資產/javascripts/application.js中取消了以下注釋:

= require jquery
= require jquery_ujs

我還嘗試使GET鏈接正常工作,從config / initializers / devise.rb更改了這一行

config.sign_out_via = : delete

對此:

config.sign_out_via = :get if Rails.env.test?

不管我嘗試什么,DELETE鏈接都會導致以下結果:

No route matches [GET] "/users/sign_out" 

GET鏈接無法正常工作:

沒有路線匹配[GET]“ /”

我當然嘗試過重啟服務器。

耙路包含以下內容:

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

提前致謝。

在devise.rb中

找到config.sign_out_via = :delete

更改為config.sign_out_via = :get

如果使用:get,請確保使用的是:method =:get,如果使用的是:delete,請使用:method =>:delete

在生產中,您可能必須將其交換,因此您應該使用if語句檢查RAILS_ENV

在您的示例中,您可能正在開發模式下運行而不是測試,這就是為什么它可能無法正常工作的原因。

並重新啟動服務器,因為它是初始化程序。

這個助手總是為我工作:

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

也許您沒有正確登錄? 您可以檢查if current_user

我們可以看到您的路線文件嗎?

特別是devise_for調用

您也可以嘗試明確設置路徑

devise_for :users, path_names: { sign_out: 'sign_out' }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM