Приложение Facebook Sinatra делает странные перенаправления - PullRequest
2 голосов
/ 17 февраля 2012

У нас есть приложение Facebook, реализованное в виде вкладок на странице. Однако для некоторых пользователей это делает странные перенаправления. Это случается не для всех, поэтому я не могу обернуть голову вокруг этого.

Когда я захожу в режиме инкогнито Chrome на нашу страницу без входа в систему, мне кажется, это тоже происходит. Что именно происходит?

Несколько вкладок в левой части страницы являются вкладками нашего приложения. Однако при нажатии на них что-то идет не так. Я всегда получаю одну и ту же главную страницу, которая является страницей Socialabs. Мои логи героки указывают на это:

2012-02-17T14:29:09+00:00 app[web.1]: 193.191.150.2 - - [17/Feb/2012 14:29:09] "POST /small HTTP/1.1" 302 - 0.0025
2012-02-17T14:29:09+00:00 heroku[router]: POST socialapp.herokuapp.com/small dyno=web.1 queue=0 wait=0ms service=28ms status=302 bytes=0
2012-02-17T14:29:09+00:00 app[web.1]: 193.191.150.2 - - [17/Feb/2012 14:29:09] "GET / HTTP/1.1" 302 - 0.0009
2012-02-17T14:29:09+00:00 heroku[router]: GET socialapp.herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=10ms status=302 bytes=0
2012-02-17T14:29:09+00:00 app[web.1]: 193.191.150.2 - - [17/Feb/2012 14:29:09] "GET /tab HTTP/1.1" 200 2173 0.0112
2012-02-17T14:29:09+00:00 heroku[router]: GET socialapp.herokuapp.com/tab dyno=web.1 queue=0 wait=0ms service=14ms status=200 bytes=2173

Что происходит, когда пользователь посещает, в этом случае вкладка «Малый» выглядит следующим образом:

a POST происходит с /small маршрутом нашего приложения. Этого следовало ожидать. Однако вместо рендеринга нашего шаблона erb для этого маршрута мы получаем еще одно перенаправление: /. Этот маршрут перенаправляется на /tab, как указано в наших маршрутах.

Я не могу понять, почему /small перенаправляет на /. Маршрут выглядит так в нашем приложении sinatra:

get "/contact" do
  erb :contact
end

post "/contact" do
  #on fb post we redirect to get route and display view
  redirect '/contact'
end

Я действительно не могу понять это. Полное содержание моего файла app.rb можно найти в этом гисте: https://gist.github.com/1864561

Заранее спасибо

1 Ответ

2 голосов
/ 19 февраля 2012

Из вашего app.rb у вас есть:

before do
  # HTTPS redirect
  if settings.environment == :production && request.scheme != 'https'
    redirect "https://#{request.env['HTTP_HOST']}"
  end
end

Я не знаю API-интерфейс Facebook или как работают их приложения, но похоже, что это может быть фильтр, который перенаправляет любой запрос без https на /.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...