2013-10-22 86 views
0

我正在構建一個需要登錄到第三方應用程序然後將響應轉發回瀏覽器的Web應用程序,因此它的行爲類似於代理。我們需要這個,因爲用戶必須在其他應用程序和我們的應用程序中自動登錄。現在,我可以將發送請求發送給其他應用程序,並且我有迴應,但無法弄清楚如何將其轉發回瀏覽器。據我所知,Rails使用render自動構建response對象。在Rails中轉發第三方應用程序的響應

def auth_test 
    uri = URI 'login_url' 

    http = Net::HTTP.new(uri.host, uri.port) 
    http.use_ssl = true 

    resp = http.post(uri.path, params.to_s) 

    logger.info 'Code = ' + resp.code 
    logger.info 'Message = ' + resp.message 
    resp.each {|key, val| logger.info key + ' = ' + val} 
    logger.info "------------------" 
    logger.info resp.body 

    # if login successful -> login to our app 

    # ??? send the response back to the browser (resp) ??? 

end 

感謝任何幫助/建議。

編輯

def auth_test 
    uri = URI 'login_url' 

    http = Net::HTTP.new(uri.host, uri.port) 
    http.use_ssl = true 

    response = http.post(uri.path, params.to_s) 

    logger.info 'Code = ' + response.code 
    logger.info 'Message = ' + response.message 
    response.each {|key, val| logger.info key + ' = ' + val} 
    logger.info "------------------" 
    logger.info response.body 

    # if login successful -> login to our app 

    # ??? send the response back to the browser (resp) ??? 
    render response 
end 

回答

0

嘗試看看問題重新POST-requests和相關post通過Net::HTTP。如果您不使用json,請相應地調整它。然後加入

render inline: response.body.html_safe, layout: false 
  • inline:意味着你沒有爲controller#auth_test行動

  • html_safe告訴Rails你的HTML是安全的生成需要的視圖(模板)。默認情況下, Rails將任何HTML轉換爲字符串以防止 惡意代碼的啞執行。

  • layout: false說來呈現不使用任何佈局,如「佈局/ application.html.erb」等

如果需要,您可以通過響應通過簡單的實例變量查看。

render response不能正常工作,bc Rails試圖根據Rails conventions for render找到此對象的關聯路由,並且肯定會失敗,但它不是ActiveRecord/ActiveModel對象。

+0

嗨。感謝您的答覆。如上所示編輯源代碼後發生以下錯誤:'#'不是ActiveModel兼容的對象。它必須實現:to_partial_path。 –

+0

適當使用'render'的更新答案 – Leger

+0

謝謝。這就是訣竅! –