ruby-on-rails redirect login devise

ruby on rails - Después de un inicio de sesión exitoso en DEVISE, ¿cómo redirigir al usuario a la acción anterior que requería iniciar sesión?



ruby-on-rails redirect (3)

Tengo un botón de votación ajax: si un usuario hace clic en una imagen de "aprobación", pero no está conectado, debería ver un cuadro de diálogo que le pide que inicie sesión primero.

Para hacer este cuadro de diálogo, estoy usando jQuery y facebox enlazado con el evento ajax: failure. Devise generará un 401 no autorizado si el usuario no ha iniciado sesión. Facebox carga el html remoto para el inicio de sesión en un cuadro de diálogo emergente que presenta el formulario de inicio de sesión DEVISE.

Todo funciona, excepto después de un inicio de sesión exitoso, el usuario es redirigido a la página de inicio. Sería más intuitivo si el usuario fuera redirigido de nuevo a la publicación que estaban viendo para poder continuar con su voto.

¿Hay alguna forma de mejores prácticas para lograr este comportamiento?

Gracias.


En ApplicationController escribe lo siguiente:

after_filter :store_location def store_location session[:previous_urls] ||= [] # store unique urls only session[:previous_urls].prepend request.fullpath if session[:previous_urls].first != request.fullpath # For Rails < 3.2 # session[:previous_urls].unshift request.fullpath if session[:previous_urls].first != request.fullpath session[:previous_urls].pop if session[:previous_urls].count > 2 end def after_sign_in_path_for(resource) session[:previous_urls].last || root_path end

Fuente: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-back-to-current-page-after-sign-in,-sign-out,-sign-up,-update


Hago lo siguiente con Authlogic en Rails 3, quizás puedas usarlo o hacer algo similar:

class ApplicationController < ActionController::Base after_filter :store_location private def store_location session[:return_to] = request.fullpath end def clear_stored_location session[:return_to] = nil end def redirect_back_or_to(alternate) redirect_to(session[:return_to] || alternate) clear_stored_location end end

Entonces puede usar algo como redirect_back_or_to dashboard_path en su acción de inicio de sesión.

Para algunos controladores / acciones, no quiero almacenar la ubicación (por ejemplo, la página de inicio de sesión). Para los que acabo de omitir el filtro:

class UserController < ApplicationController skip_after_filter :store_location end

También hay una página en la wiki de Devise para hacer esto: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in


utilizar una cookie. Obtenga el window.location.href que intentan ir y almacenarlo como una cookie. En su página de inicio, verifique la presencia de este cocinero en la función de preparación de documentos, redirija si está allí