在Rails中转发第三方应用程序的响应

时间:2013-10-22 12:00:55

标签: ruby-on-rails ruby response forward

我正在构建一个需要登录第三方应用程序的Web应用程序,然后将响应转发回浏览器,因此它就像一个代理。我们需要这个,因为用户必须在其他应用程序和我们的应用程序中自动登录。现在我可以将发布请求发送到其他应用程序,我有响应,但无法弄清楚如何将其转发回浏览器。据我所知,Rails正在使用render自动构建response对象。

 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

1 个答案:

答案 0 :(得分:1)

尝试通过Net::HTTP查看问题POST-requests和相关post。如果你不使用json,只需相应调整它。然后加

render inline: response.body.html_safe, layout: false
  • inline:表示您不需要controller#auth_test操作的视图(模板)

  • html_safe告诉Rails您的HTML可以安全生成。默认情况下 Rails将任何HTML转换为字符串以防止哑的执行 恶意代码。

  • layout: false表示要渲染不要使用任何布局,例如'layouts / application.html.erb'等。

如果需要,您可以通过普通实例变量将响应传递给View。

render response无效,bc Rails尝试根据Rails conventions for render找到此对象的关联路由并且肯定会失败,而它不是ActiveRecord / ActiveModel对象。