2017-09-26 63 views
1

我已將某些視圖ajax化,但由於某種原因,它不保留https並嘗試重定向到http。我有以下代碼:Ajax請求不保留在Rails中提供的完整URL(協議)

$(function() { 
    var polling_url = "#{eligibility_check_polling_phone_details_url}"; 
    var redirect_url = "#{eligibility_check_result_phone_details_url}"; 

    var checkResult = function() { 
    $.getJSON(polling_url, function(result) { 
     if(result.complete) location.href = redirect_url; 
     else setTimeout(checkResult, 2000); 
    }); 
    }; 

    // some more stuff 
}); 

,你可以看到我所提供的URL,但它仍然塊,因爲它被重定向到http請求這是自XSS是不允許的。

感謝

編輯:顯然#{eligibility_check_result_phone_details_url}回報http:出於某種原因,而其他所有網址都https:

+0

假設'的console.log(REDIRECT_URL)'返回一個HTTPS URL,就可以從發佈時重定向正在進行您的服務器日誌? –

+0

@NickM redirect_url實際上是'http:'只有在那裏做日誌時,很奇怪。 – supersize

回答

0

根據您的評論,因爲console.log('redirect_url')返回http鏈接,所有你需要做的就是用替換協議Javascript:

var https_redirect_url = redirect_url.replace("http", "https"); 
if(result.complete) location.href = https_redirect_url; 

如果Rails執行重定向,您將在服務器日誌中看到重定向。

如果你想要的所有路由/傭工是https您可以添加這routes.rb

default_url_options protocol: :https

此外,您還可以在控制器/命名空間層面做,如果你只是想限制某些控制器到https

class SomeController < ApplicationController 
    force_ssl if: :ssl_configured? 

    def ssl_configured? 
    !Rails.env.development? 
    end 
end 
+0

謝謝,但這將是一個安全問題,因爲有人可以將其替換回http? – supersize

+0

不一定。他們可以通過在他們的地址欄中輸入http來實現這一點,所以我不會擔心。如果你想強制整個應用程序HTTPS這是另一個問題 –

+0

是的,仍然想知道爲什麼'_url'沒有返回https – supersize