Añadir un botón de cierre de sesión en la autenticación RELAJANTE
-
24-09-2019 - |
Pregunta
He instalado autenticación de descanso y todo parece estar funcionando bien. i puede registrarse e iniciar sesión. la única manera de que pueda cerrar la sesión está escribiendo la URL http: // localhost: 3000 / cierre de sesión
¿Cómo puedo añadir un botón de cierre de sesión en una página? He intentado añadir una a la members.rhtml
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
que hace referencia al session_controller.rb pero consigo un error "Ninguna acción respondió a mostrar acciones:. crear, destruir, y el nuevo"
alguna idea? Gracias
Solución
¿Qué tiene en su archivo de rutas?
Trate de poner
map.log_out 'logout', :controller => 'sessions', :action => 'destroy'
en sus rutas.
A continuación, sólo tenemos
<%= link_to "Sign out", log_out_url %>
para el enlace Salir.
Editar
Su todo se debe a la forma de especificar la ruta.
Debido a que tenía la map.log_out en la ruta, entonces el URL http: // localhost: 3000 / cierre de sesión url es recogido por este y se dirige a la acción correcta.
Si usted tiene:
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
Esto sólo va a generar un enlace para usted de http: // localhost: 3000 / sesión . Sin embargo, no hace nada para el enrutamiento. Todavía es necesario especificar las rutas correctas.
Tenga en cuenta que los carriles no anexa la acción a la url destruir. (no va a crear http: // localhost:. 3000 / sesión / destruir ) se supone que si usted tiene una acción de destruir que va a enviar con un DELETE http verbo. Por alguna razón, no es del todo perfecto y es imposible en realidad también por defecto para enviar el verbo DELETE.
Se puede obligar a hacer esto:
<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>
Esto todavía no funciona a menos que también ruta correctamente. Si ponemos la siguiente en las rutas:
map.resource :session
A continuación, los carriles generará el enrutamiento para todos los verbos y especificar las acciones predeterminadas para ellos, incluyendo ELIMINAR. Más información se puede encontrar aquí: rieles de enrutamiento de afuera hacia adentro .
Eso página entera vale la pena leer una y otra vez hasta que realmente lo entiende. Enrutamiento es clave para entender los carriles!
Para un controlador simple como Sesiones, es más fácil simplemente para especificar la ruta log_out y luego enlazar a log_out_url ..
(Hope que tenga sentido, la privación del sueño se está arrastrando en!)
Otros consejos
Si está utilizando legado y su modelo en cuestión es usuario , la manera elegante está aquí:
<%= link_to 'logout', destroy_user_session_path, method: :delete %>
Funciona porque:
- debido a HTTP métodos son GET, POST, PUT, parche y DELETE, así que usar
method: :delete
(nomethod: :destroy
) - estamos utilizando
destroy_user_session_path
con y usuario modelo legado como de costumbre, si se define otro nombre del modelo, como Administrador que acaba de cambio de cierre de sesión ruta de acceso adestroy_manager_session_path