Добавьте кнопку выхода из системы в RESTFUL authentication
-
24-09-2019 - |
Вопрос
Я установил RESTFUL authentication, и, кажется, все работает нормально.я могу зарегистрироваться и войти в систему.единственный способ, которым я могу выйти из системы, - это ввести URL-адрес http://localhost:3000/logout
как мне добавить кнопку выхода из системы на страницу?я попытался добавить его в members.rhtml
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
который ссылается на session_controller.rb но я получаю сообщение об ошибке "На show не отреагировало действие.Действия:создавать, разрушать и создавать новое"
есть какие-нибудь мысли?спасибо
Решение
Что у вас в файле маршрутов?
Попробуйте положить
map.log_out 'logout', :controller => 'sessions', :action => 'destroy'
в ваших маршрутах.
Тогда просто есть
<%= link_to "Sign out", log_out_url %>
для выписания ссылки.
РЕДАКТИРОВАТЬ
Все это до того, как вы указываете маршрутизацию.
Потому что у вас была карта .log_out в маршрутизации, то URL http: // localhost: 3000 / Выход URL привлек это и направляется на правильное действие.
Если у тебя есть :
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
Это просто принесет ссылку для вас http: // localhost: 3000 / сеанс. Отказ Но это не делает ничего для маршрутизации. Вам все еще нужно указать правильные маршруты.
Обратите внимание, что рельсы не добавляют к URL-адреса. (Это не будет создавать http: // localhost: 3000 / сессия / уничтожить.) Предполагается, что если у вас есть действие уничтожения, что вы будете отправлять его с помощью HTTP-глагола удаления. По какой-то причине его не совсем идеально, и он действительно не также по умолчанию отправка глагола удаления.
Вы можете заставить его сделать это:
<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>
Это все равно не будет работать, если вы также не направите его правильно. Если вы поместите следующее в маршруты:
map.resource :session
Затем Rails создаст маршрутизацию для всех глаголов и указывает для них действия по умолчанию для них, включая удаление. Более подробную информацию можно найти здесь : Рельсы маршрутизация снаружи в.
Эта целая страница стоит читать и снова, пока вы действительно не поймете. Маршрутизация является ключом к пониманию рельсов!
Для простого контроллера, подобных сеансам, проще просто указать маршрут log_out, а затем ссылаться на log_out_url ..
(Надеюсь, что имеет смысл, лишение сна ползет!)
Другие советы
Если вы используете придумать и вашей заинтересованной моделью является Пользователь, элегантный способ находится здесь:
<%= link_to 'logout', destroy_user_session_path, method: :delete %>
Это работает, потому что:
- из-за HTTP-методов GET, POST, PUT, PATCH и DELETE, поэтому использование
method: :delete
(неmethod: :destroy
) - мы используем
destroy_user_session_path
с придумать и Пользователь модель как обычно, если вы определяете другое название модели, например Менеджер вы просто меняете путь выхода из системы наdestroy_manager_session_path