2013-03-07 3 views
1

Я новичок в программировании на iOS и с помощью Rubymotion создаю свое первое приложение. В моем Rubymotion приложении I POST на веб-сервер (приложение построено с использованием RoR) для аутентификации пользователя, желающего Вход и использует Bubblewrap камень для RubyMotion https://github.com/rubymotion/BubbleWrap/blob/master/motion/http.rbRubymotion: GET Request using JSON

def login(sender) 
    payload = {email: @email, password: @password} 
    BubbleWrap::HTTP.post("http://example.com/sessions", {payload: payload}) do |response| 
    @authCookie = response.headers['Set-Cookie'] 
end 
end 

Теперь, как только я получаю успешную аутентификацию я двигаюсь на, чтобы получить JSON данных из веб-приложения, используя следующий код:

BubbleWrap::HTTP.get("http://example.com/events.json", {cookie: @authCookie, :headers=>{"Content-Type"=>'json'} }) do |response| 
puts response.body #testing the response 
end 

по какой-то причине, маркер аутентификации, полученные из запроса POST это не правильно передается с помощью запроса GET. Я знаю это, потому что в веб-приложении, если аутентификация не удалась, она перенаправляется на страницу входа, и это ответ (HTML-код страницы входа), который я получаю из запроса GET.

проверка подлинности на Web App:

def session_check 
    if session[:bizid].nil? 
    redirect_to login_url 
    flash[:notice] = "Please login to view your account!" 
    end 
    end 

Кроме того, на веб-приложение, этот маркер аутентификации задается следующим способом:

def create 
    current_biz = Bizname.find_by_email(params[:email]) 
     if current_biz && current_biz.authenticate(params[:password]) 
      session[:bizid] = current_biz.id 
      flash[:notice] = 'Login Successful!' 

      if current_biz.events.empty? 
       redirect_to getsetup_url 
      else 
       redirect_to account_summary_url 
      end 

     else 
      flash[:notice] = 'Incorrect Email or Password.' 
      redirect_to login_url 
     end 
    end 

Любые идеи, что я могу делать неправильно Вот?

Заранее благодарен!

+0

Ваша поговорка @authCookie равна нулю в GET? – Swards

+0

Я тестировал код немного больше. Я думаю, что что-то не так в самом POST. @authCookie возвращает некоторое значение в POST, однако, когда я проверяю response.body после запроса POST, он возвращает страницу входа, которая возникает только в случае сбоя аутентификации. – user1748009

+0

вы знаете, что apb bubblewrap работает асинхронно и вам нужно присоединиться к потокам, когда вы хотите последовательно делать запросы? – phoet

ответ

2

Вам просто нужно передать cookie в качестве заголовка. Например:

BubbleWrap::HTTP.get("http://example.com/events.json", :headers=> {"Content-Type"=>'json', "Cookie" => @authCookie}) do |response| 
    puts response.body #testing the response 
end