Devise destroy_user_session_path doesn't work

谁都会走 提交于 2019-12-25 13:27:26

问题


In my ruby on rails application I've a problem for the user logout with devise

I've this navbar:

<% if current_user %>
<nav class="top-bar" data-topbar role="navigation">
  <ul class="title-area">
    <li class="name">
      <h1><%= link_to 'Prova CMS', articles_path %></h1>
    </li>
    <li class="toggle-topbar menu-icon"><a href="#"></a></li>
  </ul>

  <section class="top-bar-section">
    <ul class="right">
      <li><%=link_to 'Gestisci Articoli', articles_path %></li>
      <li><%=link_to 'Gestisci Categorie', categories_path %></li>
      <li class="has-dropdown">
        <a href="#"><%= current_user.email %></a>
        <ul class="dropdown">
          <li><%= link_to "Logout", destroy_user_session_path, :method => :delete %></li>
        </ul>
      </li>
    </ul>

    <% if current_page?(articles_path) %>
    <ul class="left">
      <div class="large-12 columns">
        <%= form_tag articles_path, :id => "articles_search" , method: 'get' do %>
          <%= text_field_tag :search, params[:search], :placeholder => "Cerca per titolo"%>
        <% end %>
      </div>
    </ul>
    <% end %>
  </section>
</nav>

<% else %> 

<nav class="top-bar" data-topbar role="navigation">
  <ul class="title-area">
    <li class="name">
      <h1><%= link_to 'Prova CMS', root_path %></h1>
    </li>
    <li class="toggle-topbar menu-icon"><a href="#"></a></li>
  </ul>

  <section class="top-bar-section">
    <ul class="right">
      <li><%= link_to 'Login', new_user_session_path%></li>
    </ul>
  </section>
</nav>

that i render in the application layout of the site (application.html.erb). In some page the logouts links doesn't works and they generate a Hashtag on the url of the views (for example if i'm on the articles_path localhost:3000/articles the link add # near the /articles -> /articles#)

in the config/initializer of devise this string is uncommented:

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

and in the application.js i've got all the jquery links working fine:

    // This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery
//= require jquery_ujs
//= require foundation
//= require turbolinks
//= require_tree .

$(function(){ 
    $(document).foundation();
});

and for final these are my routes:

Rails.application.routes.draw do
  get 'show/index'
  root to: "show#index"


  devise_for :users
  resources :categories
  resources :articles

end

回答1:


I think your issue may be related to turbolinks. Try disabling turbolinks for this page to validate whether this is the case. To your body tag add:

<body data-no-turbolink="true">

I believe that turbolinks is treating your logout link like a standard page link, preventing the actual functionality firing

EDIT

If you prove this is the case, focus disabling turbolinks to just the specific link that causes problems and remove the attribute from the body.

<%= link_to "Logout", destroy_user_session_path, :method => :delete, :data => { :no_turbolink => true } %>


来源:https://stackoverflow.com/questions/32905257/devise-destroy-user-session-path-doesnt-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!