我的用户体验涉及用户在进行身份验证之前提交表单(使用omniauth)。我开始做这样的事情:
def self.require_facebook_authentication!(options={})
before_filter :redirect_to_facebook_if_not_authenticated options
end
def redirect_to_facebook_if_not_authenticated
if !logged_in?
session[:param_cache] = params
session[:original_destination] = request.fullpath
redirect_to '/auth/facebook'
end
end
然后,在点击auth回调时,重定向到提交带有post params inline的表单的页面,总共有3个重定向(/stuff/new/ on POST -> auth/facebook -> facebook -> /auth/facebook/callback [ html template with POST form ] -> /stuff/create
)。我宁愿不创建一个身份验证弹出窗口;相反,我想导航到一个单独的页面,登录并重定向到已完成的操作。
我对Rails相当新,所以我还在学习 - 这是否已经内置于另一个框架?我错过了一些非常基本的东西吗提前谢谢!
答案 0 :(得分:4)
如果您询问是否有“RAILS”方式会在重定向后自动发布数据,则答案为否(请参阅https://stackoverflow.com/questions/985596/redirect-to-using-post-in-rails)
在我看来,最安全,最简单,最RESTful的方式来实现你想要的只是让你最终发布的params存储在session中,这样你就可以重定向回到原来的'new'页面并拥有表单自动预填充后期数据。当然这对于用户来说是一个额外的步骤,但由于REST不允许重定向到POST,因此它是最简洁的方法
答案 1 :(得分:0)
可能有更好的方法,但是如果你在验证后渲染它,那么客户端将Ajax发布表单内容然后重定向。
<script>
new Ajax.Request(<%= session[:original_destination] %>, {
method: 'post',
params: '<%= session[:param_cache].to_query %>',
onSuccess: function(){
window.location = '<%= session[:original_destination] %>';
}
});
</script>