我有一个ajax投票按钮:如果用户单击了“拇指向上”的图像,但没有登录,那么他们应该会看到一个对话框,要求他们首先登录。
为了实现这个对话框,我使用了绑定到ajax:failure事件的jQuery和facebox。如果用户未登录,Devise将引发401 Unauthorized。facebox在弹出的对话框中加载用于登录的远程html,该对话框显示了DEVISE signin表单。
一切工作,但成功登录后,用户被重定向到主页。如果用户被重定向回他们正在查看的帖子,这样他们就可以继续投票,这将更加直观。
是否有实现此行为的最佳实践方法?
谢谢。
发布于 2011-08-09 07:00:06
我用Authlogic on Rails 3做了以下事情,也许你可以使用它或者做一些类似的事情:
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
发布于 2012-11-01 22:13:10
在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
发布于 2011-08-09 06:45:40
使用cookie。获取他们试图访问的window.location.href并将其存储为cookie。在您的主页上,检查document ready函数中是否存在此cookier,如果存在,请重定向
https://stackoverflow.com/questions/6989421
复制相似问题