2011-03-18 23 views
2

我的用戶體驗涉及用戶在驗證之前提交表單(使用omniauth)。我開始做這樣的事情:在驗證用戶身份之後,是否有「導軌方式」重試POST?

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數據內嵌,共3個重定向(/stuff/new/ on POST -> auth/facebook -> facebook -> /auth/facebook/callback [ html template with POST form ] -> /stuff/create)的頁面。我寧願不創建身份驗證彈出窗口;相反,我想導航到一個單獨的頁面,登錄並重定向到已完成的操作。

我對Rails相當陌生,所以我仍然在學習 - 這是否已經內置於另一個框架?我錯過了一些非常基本的東西?提前致謝!

回答

4

如果你問,以是否有一個「導軌」的方式重定向後,它會自動上傳數據,答案是否定的(見https://stackoverflow.com/questions/985596/redirect-to-using-post-in-rails)

在我看來是最安全的,最簡單,最RESTful的方式來實現你想要的只是簡單地將你最終發佈的參數存儲在會話中,以便你可以重定向到原來的'新'頁面並使表單自動預填充發布數據。這對於用戶來說是一個額外的步驟,但是由於REST不允許重定向到POST,所以它是最簡單的方式去處理它

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> 
+0

不會嘗試去兩次original_destination嗎? (一旦POST數據,然後再次沒有?) – 2011-03-18 04:28:29

+0

@Anthony Bishopric:是的。您希望捕獲並更改window.location調用,以便在成功發佈後將用戶發送到的位置。 – Unixmonkey 2011-03-18 13:23:26