1

我正在构建一个需要登录到 3rd 方应用程序然后将响应转发回浏览器的 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
4

1 回答 1

1

尝试通过POST 请求查看问题和相关帖子Net::HTTP。如果不使用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 渲染约定为该对象查找关联的路由,但肯定会失败,而它不是 ActiveRecord/ActiveModel 对象。

于 2013-10-22T12:13:29.217 回答