【问题标题】:Problem Signing Out with Devise on my App在我的应用程序上使用 Devise 退出时出现问题
【发布时间】:2011-09-29 15:06:21
【问题描述】:

我正在更新我的应用程序,因此我使用 Devise gem 进行身份验证。一切似乎都很好,除了我似乎无法退出。

我得到错误:

Couldn't find User with ID=sign_out
Parameters:
{"id"=>"sign_out"}

我可以将错误追溯到我的用户控制器中的显示操作:

  def show
    @user = User.find(params[:id])
  end

问题是我不确定它为什么要尝试为我的用户呈现显示操作。总体而言,我的页面具有以下格式:

<% if user_signed_in? %>
    <%= render 'shared/feed_home' %>
<% else %>
  <%= render 'shared/splash' %>
<% end %>

根据设计说明,我的退出路径如下所示:

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

如果用户没有登录,它应该呈现基本上是静态 html 的启动页面。关于如何提供帮助的任何建议?即使您可以将我放在正确的球场上,也将不胜感激。

Here is my routes file:


  devise_for :users
  resources :users do
    member do
      get :following, :followers, :following_tags, :following_posts
    end
  end
  resources :posts 

  resources :votes
  resources :comments
  resources :tags
  resources :events

  #resources :posts,    :only => [:create, :destroy, :show]
  resources :relationships, :only => [:create, :destroy]

  root :to =>'pages#subscribed'


  match '/contact', :to => 'pages#contact'
  match '/about',   :to => 'pages#about'
  match '/live',   :to => "pages#home"
  match '/voted', :to => 'pages#highest_voted'
  match '/signup',  :to => 'users#new'

这是我的 rake 路线:

        new_user_session GET    /users/sign_in(.:format)             {:action=>"new", :controller=>"devise/sessions"}
            user_session POST   /users/sign_in(.:format)             {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)            {:action=>"destroy", :controller=>"devise/sessions"}
           user_password POST   /users/password(.:format)            {:action=>"create", :controller=>"devise/passwords"}
       new_user_password GET    /users/password/new(.:format)        {:action=>"new", :controller=>"devise/passwords"}
      edit_user_password GET    /users/password/edit(.:format)       {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)            {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET    /users/cancel(.:format)              {:action=>"cancel", :controller=>"devise/registrations"}
       user_registration POST   /users(.:format)                     {:action=>"create", :controller=>"devise/registrations"}
   new_user_registration GET    /users/sign_up(.:format)             {:action=>"new", :controller=>"devise/registrations"}
  edit_user_registration GET    /users/edit(.:format)                {:action=>"edit", :controller=>"devise/registrations"}
                         PUT    /users(.:format)                     {:action=>"update", :controller=>"devise/registrations"}
                         DELETE /users(.:format)                     {:action=>"destroy", :controller=>"devise/registrations"}
          following_user GET    /users/:id/following(.:format)       {:action=>"following", :controller=>"users"}
          followers_user GET    /users/:id/followers(.:format)       {:action=>"followers", :controller=>"users"}
     following_tags_user GET    /users/:id/following_tags(.:format)  {:action=>"following_tags", :controller=>"users"}
    following_posts_user GET    /users/:id/following_posts(.:format) {:action=>"following_posts", :controller=>"users"}
                   users GET    /users(.:format)                     {:action=>"index", :controller=>"users"}
                         POST   /users(.:format)                     {:action=>"create", :controller=>"users"}
                new_user GET    /users/new(.:format)                 {:action=>"new", :controller=>"users"}
               edit_user GET    /users/:id/edit(.:format)            {:action=>"edit", :controller=>"users"}
                    user GET    /users/:id(.:format)                 {:action=>"show", :controller=>"users"}
                         PUT    /users/:id(.:format)                 {:action=>"update", :controller=>"users"}
                         DELETE /users/:id(.:format)                 {:action=>"destroy", :controller=>"users"}
                   posts GET    /posts(.:format)                     {:action=>"index", :controller=>"posts"}
                         POST   /posts(.:format)                     {:action=>"create", :controller=>"posts"}
                new_post GET    /posts/new(.:format)                 {:action=>"new", :controller=>"posts"}
               edit_post GET    /posts/:id/edit(.:format)            {:action=>"edit", :controller=>"posts"}
                    post GET    /posts/:id(.:format)                 {:action=>"show", :controller=>"posts"}
                         PUT    /posts/:id(.:format)                 {:action=>"update", :controller=>"posts"}
                         DELETE /posts/:id(.:format)                 {:action=>"destroy", :controller=>"posts"}
                   votes GET    /votes(.:format)                     {:action=>"index", :controller=>"votes"}
                         POST   /votes(.:format)                     {:action=>"create", :controller=>"votes"}
                new_vote GET    /votes/new(.:format)                 {:action=>"new", :controller=>"votes"}
               edit_vote GET    /votes/:id/edit(.:format)            {:action=>"edit", :controller=>"votes"}
                    vote GET    /votes/:id(.:format)                 {:action=>"show", :controller=>"votes"}
                         PUT    /votes/:id(.:format)                 {:action=>"update", :controller=>"votes"}
                         DELETE /votes/:id(.:format)                 {:action=>"destroy", :controller=>"votes"}
                comments GET    /comments(.:format)                  {:action=>"index", :controller=>"comments"}
                         POST   /comments(.:format)                  {:action=>"create", :controller=>"comments"}
             new_comment GET    /comments/new(.:format)              {:action=>"new", :controller=>"comments"}
            edit_comment GET    /comments/:id/edit(.:format)         {:action=>"edit", :controller=>"comments"}
                 comment GET    /comments/:id(.:format)              {:action=>"show", :controller=>"comments"}
                         PUT    /comments/:id(.:format)              {:action=>"update", :controller=>"comments"}
                         DELETE /comments/:id(.:format)              {:action=>"destroy", :controller=>"comments"}
                    tags GET    /tags(.:format)                      {:action=>"index", :controller=>"tags"}
                         POST   /tags(.:format)                      {:action=>"create", :controller=>"tags"}
                 new_tag GET    /tags/new(.:format)                  {:action=>"new", :controller=>"tags"}
                edit_tag GET    /tags/:id/edit(.:format)             {:action=>"edit", :controller=>"tags"}
                     tag GET    /tags/:id(.:format)                  {:action=>"show", :controller=>"tags"}
                         PUT    /tags/:id(.:format)                  {:action=>"update", :controller=>"tags"}
                         DELETE /tags/:id(.:format)                  {:action=>"destroy", :controller=>"tags"}
                  events GET    /events(.:format)                    {:action=>"index", :controller=>"events"}
                         POST   /events(.:format)                    {:action=>"create", :controller=>"events"}
               new_event GET    /events/new(.:format)                {:action=>"new", :controller=>"events"}
              edit_event GET    /events/:id/edit(.:format)           {:action=>"edit", :controller=>"events"}
                   event GET    /events/:id(.:format)                {:action=>"show", :controller=>"events"}
                         PUT    /events/:id(.:format)                {:action=>"update", :controller=>"events"}
                         DELETE /events/:id(.:format)                {:action=>"destroy", :controller=>"events"}
           relationships POST   /relationships(.:format)             {:action=>"create", :controller=>"relationships"}
            relationship DELETE /relationships/:id(.:format)         {:action=>"destroy", :controller=>"relationships"}
                    root        /(.:format)                          {:controller=>"pages", :action=>"subscribed"}
                 contact        /contact(.:format)                   {:controller=>"pages", :action=>"contact"}
                   about        /about(.:format)                     {:controller=>"pages", :action=>"about"}
                    live        /live(.:format)                      {:controller=>"pages", :action=>"home"}
                   voted        /voted(.:format)                     {:controller=>"pages", :action=>"highest_voted"}
                  signup        /signup(.:format)                    {:controller=>"users", :action=>"new"}

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-3 devise


【解决方案1】:

其实,忽略我之前的回答,试试这个:

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

【讨论】:

  • 我目前不在电脑旁,无法对此进行测试。但是,我会在我回家后立即对其进行测试。再次感谢:)
  • 没问题。看起来 Devise 没有为注销生成 get 方法,只是删除。文档说应该,所以不知道为什么没有。但它应该工作:-)
  • 完全是这样 - 路由需要 delete 方法,而不是 get 方法。 ` destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"} `
  • 很好的解决方案。我遇到了同样的问题,这解决了。
【解决方案2】:

问题可能出在您的routes.rb 文件中。您需要适当地路由user/signout,并且它需要在您的用户的路由之上,因为路由是自上而下工作的。如果您发布路线文件,我可以提供更多帮助。

您的devise_for :users 上方是否有resources :users

我想您也可以尝试确定设计路线的范围:

    devise_scope :users do
      get "sign_out", :to => "devise/sessions#destroy"
    end

【讨论】:

  • 我认为设计应该自动提供该路线?根据我最近的编辑,我只是​​链接到用于结束会话的默认设计路线。
  • 我也发布了我的路线文件。
  • 是的,看看我的更新。由于某种原因,rails 认为 sign_out 是用户资源的 id。 rake routes 带给你什么?
  • 你有没有试过暂时把resources :users拿出来看看路由是否可行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多