我有一个ajax投票按钮:如果用户点击“竖起大拇指”图像但未登录,那么他们应该会看到一个对话框,要求他们先登录。
要执行此对话框,我使用jQuery和facebox绑定到ajax:failure事件。如果用户未登录,Devise将引发401 Unauthorized .facebox在弹出对话框中加载远程html以进行登录,该对话框显示DEVISE登录表单。
除了成功登录后,一切正常,用户被重定向到主页。如果用户被重定向回他们正在查看的帖子,那么他们可以继续投票,这将更加直观。
是否有实现此行为的最佳做法?
感谢。
答案 0 :(得分:19)
我在Rails 3上使用Authlogic执行以下操作,也许您可以使用它或执行类似的操作:
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
然后,您可以在登录操作中使用redirect_back_or_to dashboard_path
之类的内容。
对于某些控制器/操作,我不想存储位置(例如登录页面)。对于那些我只是跳过过滤器:
class UserController < ApplicationController
skip_after_filter :store_location
end
在Devise wiki中还有一个关于这样做的页面:https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in
答案 1 :(得分:4)
在ApplicationController中写下以下内容:
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
答案 2 :(得分:-1)
使用cookie。获取他们尝试去的window.location.href并将其存储为cookie。在您的主页上,检查文档就绪功能中是否存在此cookier,如果在那里则重定向