2013-10-22 1 views
0

타사 응용 프로그램에 로그인 한 다음 응답을 브라우저에 전달하여 프록시처럼 작동해야하는 웹 응용 프로그램을 구축하고 있습니다. 사용자는 다른 앱과 앱 모두에 자동으로 로그인해야하기 때문에이 기능이 필요합니다. 지금은 다른 응용 프로그램에 게시물 요청을 보낼 수 있으며 응답이 있지만 브라우저로 다시 전달하는 방법을 알아낼 수 없습니다. 내가 아는 바로는 레일즈 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

봅니다 Net::HTTP를 통해 POST-requests 및 관련 post 재 질문을보고합니다. json을 사용하지 않는다면 그에 맞게 조정하십시오. 그런 다음

render inline: response.body.html_safe, layout: false 
  • inline: 당신이

  • html_safe 당신의 HTML을 생성하는 것이 안전 레일을 알려줍니다 controller#auth_test 액션 뷰 (템플릿)가 필요 없다는 뜻 추가 할 수 있습니다. 기본적으로 레일즈는 임의의 HTML을 문자열로 변환하여 악성 코드의 바보 실행을 방지합니다.

  • layout: false

    이 필요한 경우, 당신은 일반 인스턴스 변수를 통해 보는 응답을 전달할 수있는 '레이아웃/application.html.erb'등

처럼, 어떤 레이아웃을 사용하지 않는 렌더링 말한다.

render response이 작동하지 않는 경우, bc 레일스는 Rails conventions for render에 따라이 객체에 대한 관련 경로를 찾으려고 시도하며 확실히 실패합니다. 반면 ActiveRecord/ActiveModel 객체는 아닙니다.

+0

안녕하세요. 당신의 응답을 주셔서 감사합니다. 위와 같이 소스를 편집하면 다음 오류가 발생합니다. '# '이 (가) ActiveModel 호환 객체가 아닙니다. to_partial_path를 구현해야합니다. –

+0

'render '를 적절히 사용하여 UPDated 응답 – Leger

+0

감사합니다. 그 트릭을 했어! –

관련 문제