【问题标题】:Rails Devise, No route matches '/users/sign_out' -> SignOut/Logout Routes problemRails 设计,没有路由匹配 '/users/sign_out' -> SignOut/Logout Routes 问题
【发布时间】:2020-01-26 07:09:57
【问题描述】:

我有一个应用程序使用 devise 登录/退出,以及查看/创建配置文件。到目前为止,用户可以创建和删除配置文件,尽管每个用户只应该有一个配置文件。在整个应用程序出现 SignOut/LogOut 之前,我已经设置了我的路线几乎没有问题。最终,我只能破译错误日志,并且似乎 routes.rb 需要一些修改才能使其正常工作,但我很难过。这是错误和routes.rb: /log/production.log:

Started DELETE "/users/sign_out" for 127.0.0.1 at 2020-01-26 01:56:53 -0500
ActionController::RoutingError (No route matches [DELETE] "/users/sign_out"):

routes.rb

Rails.application.routes.draw do
devise_for :users, :controllers => {:sessions => "users/sessions" }

resources :profiles, only: [:new, :create, :edit, :update, :destroy]

devise_scope :user do
authenticated :user do
root to: 'profiles#index', as: :authenticated_root
get '/profiles/new' => 'profiles#new'
match '/profiles' => 'profiles#create', via: [:get, :post]
get '/profiles/:id' => 'profiles#show'
get '/profiles/:id/edit' => 'profiles#edit'
match '/profiles/:id' => 'profiles#update', via: [:get, :post]
delete '/profiles' => 'profiles#destroy', via: [:get, :post]
end
unauthenticated :user do
root to: 'devise/sessions#new', as: :unauthenticated_root
match '/users/sign_in' => 'devise/sessions#create', via: [:get, :post]
delete '/users/sign_out' => 'devise/sessions#destroy'
end
end
end

我读到使用资源 :users 可能会影响设计会话控制器,因为我需要一个 UsersController,但是没有在我的路由中包含资源 :users 和/或类似的错误。

【问题讨论】:

    标签: ruby-on-rails ruby devise


    【解决方案1】:

    您将退出路由放置在routes.rbunauthenticated 块中

    unauthenticated :user do
      # ..
      delete '/users/sign_out' => 'devise/sessions#destroy'
    end
    

    什么没有意义,只有经过身份验证的用户才能退出。只需将该方法移到上面的authenticated :user 块中:

    authenticated :user do
      # ..
      delete '/users/sign_out' => 'devise/sessions#destroy'
    end
    

    【讨论】:

      猜你喜欢
      • 2011-12-27
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 2016-10-28
      • 2014-01-29
      相关资源
      最近更新 更多