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
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í