Перехват XML-ответа с использованием Nokogiri в рельсах 3.0.9 - PullRequest
0 голосов
/ 30 августа 2011

Я пытаюсь аутентифицировать процесс входа в систему. В процессе входа в систему, если имя пользователя и пароль верны, пользователь войдет в свою панель управления, но если имя пользователя и пароль неверны, я получу один XML-ответ.

Ниже приведен код сеанса_контроллера

{

require 'net/http'
require 'uri' 
require 'open-uri'
require 'nokogiri'
class SessionsController < ApplicationController
 def new
 @title = "Sign in"

 end

 def create

  redirect_to "http://<SERVER_IP>/billing/api/login?u=#{params[:session][:email]}&p=#{params[:session][:password]}"

a = "http://<SERVER_IP>/billing/api/login?u=#{params[:session][:email]}&p=#{params[:session][:password]}"

doc = Nokogiri::XML(open(a).read)  
    doc.css('status').each do |link|


  # Create error message and re-render signin page

 @b = link.content


 end
end

 def destroy
  sign_out
  redirect_to root_path
 end
 end

}

Я получаю этот вид XML-ответа от сервера

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<action>
<name>login</name>
<status>failed</status>
<status_message>Error description</status_message>
</action>

те, которые я получаю, я хочу отправить сообщение об ошибке, используя приведенный выше XML-ответ.

Если у кого-нибудь возникнет идея, спасет мой день.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Nokogiri дает вам прямой доступ к тексту документа:

require 'nokogiri'

doc = Nokogiri::XML(
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<action>
<name>login</name>
<status>failed</status>
<status_message>Error description</status_message>
</action>'
)

В irb вы увидите:

doc.text

>> "\nlogin\nfailed\nError description\n"

Вы можете упростить свой код до чего-то вроде:

doc = Nokogiri::XML(open(a))

if doc.text['failed']
  ...
0 голосов
/ 31 августа 2011

Привет, ребята, я наконец-то закончил с вышеуказанной функциональностью. Это не так сложно, как я думал для других пользователей, я вставляю точный фрагмент здесь

def create

 a = "http://<SERVER IP>/billing/api/login?u=#{params[:session][:email]}&p=#{params[:session][:password]}"   

 # Nokogiri Gem is used to Catch the XML response from the MOR & call the appropriate action on the received status

  doc = Nokogiri::XML(open(a))
     doc.xpath('/action/status').each do |link|  
    @abc = link.content
     end 

    # Condition to check whether the received response is 'Ok' or 'Failed' 

    if @abc == 'failed'

            flash[:notice] = "Invalid Username/Password" # If condition is failed redirect to root page
             redirect_to '/' 
           else
                # if condition is 'ok' redirect to MOR user dashboard

               redirect_to "http://<SERVER IP>/billing/api/login?u=#{params[:session][:email]}&p=#{params[:session][:password]}"
         end                                        

конец

...