在我的Rails應用4,我有一個before_action
需要用戶先登錄,就像這樣:Rails redirect_to從https(正確)重定向到http(不正確)?
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :require_login
def require_login
unless logged_in?
flash[:alert] = "You must be logged in to access this section."
redirect_to login_path
end
end
def logged_in?
# more logic
end
end
當我訪問example.com
沒有被登錄,我重定向到example.com/login
預期。然而,我在控制檯中看到此錯誤:
The page at 'https://example.com/login' was loaded over HTTPS, but displayed
insecure content from 'http://example.com/login': this content should also
be loaded over HTTPS.
網絡選項卡似乎表明我的redirect_to
指向我HTTP
,而不是HTTPS
。當它遇到HTTP時,它會自動重定向到HTTPS
。
Request URL:http://example.com/login
Request Method:GET
Status Code:301 Moved Permanently
# In the response headers:
Location:https://example.com/login
有沒有辦法告訴redirect_to
它應該使用的HHTPS
代替HTTP
,或者這是一個nginx的配置?我認爲使用login_path
而不是login_url
將解決這個問題,因爲它應該是相對於基地,但似乎沒有工作。
更新:
我想過使用force_ssl
很好,但擔心我正在錘子圖釘。如果我錯了,隨時糾正我。
會'force_ssl'影響所有的流量?我也考慮過這個解決方案,但擔心我正在用錘子敲一個圖釘。 – dontmitch
它會影響'ApplicationController'下的所有東西,所以可以控制所有的控制器。你應該把它添加到你想要的控制器中,但是我想這就是你定義了'login'動作的控制器。 – Agis