对于非登录用户,我的应用程序的流程如下所示:
1) non-logined user does a given action that requires login (arbitrary)
2) dialog appears for non-logined user and he logins without any refreshing of the page
3) collecting of additional information if it is new user
3) the given action should be executed
我该怎么办?我相信它可以通过精心设计的回调来完成。部分棘手的部分是有一系列潜在行动
答案 0 :(得分:1)
你已经标记了ruby-on-rails,所以我想这将是一个rails应用程序。您是否计划实施自己的身份验证和登录系统,或者您打算使用gem /插件。我问,因为如果动作都是在/ a控制器中定义的话,我不会想到动作的范围会很棘手。例如,devise添加:
before_filter :authenticate_user!
控制器中的将确保所有操作都需要登录。这可以通过以下方式进一步改进:除了
before_filter :authenticate_user!, :except => [:index, :show]
考虑到这一点,我们只需要考虑ajax部分。您也许可以使用js.erb模板并在方法中使用respond_to来实现此目的,例如
def log_in
respond_to do |f|
# gracefully fallback!
f.html { redirect_to new_user_session_path }
# or do something snazy..
f.js
end
end
困难的部分可能实际上是让ajax日志部分工作,但希望我所说的可能有助于思考过程。
Ryan Bates使用Rails对jQuery进行了很好的截屏,但是我无法发布链接...
答案 1 :(得分:1)
尝试查看jQuery的taconite plugin。这个和Ruby有一个线程,但它似乎已经消失了,除了Google's cache。
答案 2 :(得分:1)
将操作存储为变量中的回调:
var callback = function() { alert ("You are logged in."); };
当未记录的用户尝试执行此操作时,通过单击按钮或其他任何内容,您的应用程序应将回调作为参数传递给登录函数,如下所示:
show_login_form(callback);
...其中callback
是在成功登录时执行的内容。把它们放在一起:
var callback = function() { alert ("You are logged in."); };
if (loggedIn)
callback();
else
show_login_form(callback);
请确保您进行某种服务器端验证,因为我的示例过于简单且容易被黑客攻击。