Ajouter un bouton de déconnexion dans l'authentification RESTFUL
-
24-09-2019 - |
Question
J'ai installé l'authentification et tout semble RESTFUL fonctionner très bien. je peux inscrire et vous connecter. la seule façon que je peux déconnecter en tapant est l'URL http: // localhost: 3000 / fermeture de session
Comment puis-je ajouter un bouton de fermeture de session sur une page? i essayé d'ajouter un à l'members.rhtml
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
qui fait référence à la session_controller.rb mais je reçois une erreur « Aucune action a répondu à montrer Actions:. créer, détruire, et nouveau »
toutes les pensées? thanx
La solution
Qu'est-ce que vous avez dans votre fichier routes?
Essayez de mettre
map.log_out 'logout', :controller => 'sessions', :action => 'destroy'
dans vos itinéraires.
Ensuite suffit
<%= link_to "Sign out", log_out_url %>
pour le lien déconnectez-vous.
EDIT
Son tout à la façon dont vous spécifiez le routage.
Parce que vous avez eu l'map.log_out dans le routage, le http: // localhost: 3000 / fermeture de session url est repris par cela et dirigé vers l'action correcte.
Si vous avez:
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
Cela vient de générer un lien pour vous de http: // localhost: 3000 / Session . Mais, il ne fait rien pour le routage. Vous devez toujours indiquer les routes correctes.
Notez que Rails ne rajoutez pas détruire l'action à l'URL. (Il ne crée pas http: // localhost:. 3000 / Session / détruire ) il suppose que si vous avez une action de détruire que vous enverrez avec un verbe SUPPRIMER http. Pour une raison quelconque, ce ne est pas tout à fait parfait et il ne marche pas fait défaut également d'envoyer le verbe SUPPR.
Vous pouvez forcer à faire ceci:
<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>
Cela fonctionne toujours pas à moins que vous aussi la route correctement. Si vous mettez ce qui suit dans les routes:
map.resource :session
Ensuite rails généreront le routage pour tous les verbes et spécifier les actions par défaut pour eux, y compris SUPPR. Plus d'informations peuvent être trouvées ici: Rails d'acheminement de l'extérieur .
Cette page entière mérite d'être lu à plusieurs reprises jusqu'à ce que vous comprenez vraiment. Le routage est la clé pour comprendre Rails!
Pour un contrôleur simple comme sessions, il est plus facile de spécifier la route log_out puis reliez à log_out_url ..
(espoir qui fait sens, la privation de sommeil est rampant dans!)
Autres conseils
Si vous utilisez concevoir et votre modèle concerné est utilisateur , la façon élégante est ici:
<%= link_to 'logout', destroy_user_session_path, method: :delete %>
Cela fonctionne parce que:
- en raison de méthodes HTTP sont GET, POST, PUT, PATCH et DELETE, donc l'utilisation
method: :delete
(nonmethod: :destroy
) - nous utilisons
destroy_user_session_path
avec concevoir et utilisateur modèle comme d'habitude, si vous définissez un autre nom de modèle tel que Gestionnaire vous venez de changer fermeture de session chemin dedestroy_manager_session_path