我正在构建一个需要登录第三方应用程序的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
答案 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对象。