Rails Devise, Нет подходящих маршрутов '/ users / sign_out' -> Проблема SignOut / Logout Routes - PullRequest
0 голосов
/ 26 января 2020

У меня есть приложение, использующее devise для входа / выхода и просмотра / создания профилей. Пока что пользователи могут создавать и удалять профили, хотя предполагается, что на одного пользователя должен быть только один профиль. Я почти без проблем настроил свои маршруты, пока не выйдет SignOut / LogOut из всего приложения. В конечном итоге, журнал ошибок - это все, что я могу расшифровать, и кажется, что для того, чтобы это работало, с помощью ports.rb нужно что-то изменить, но я в замешательстве. Вот ошибки и route.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"):

rout.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

Я читал, что используя ресурсы: пользователи могут влиять на разработку контроллера сессий, в этом мне понадобится UsersController, однако я не включил ресурсы: пользователей в мои маршруты и / или для аналогичной ошибки.

1 Ответ

0 голосов
/ 26 января 2020

Вы поместили маршрут выхода в блок unauthenticated в вашем routes.rb

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

Что не имеет смысла, только авторизованные пользователи могут выйти. Просто переместите этот метод в блок authenticated :user выше:

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