2012-05-30 3 views
0

Пытается использовать JQuery widgets - фактически JQGrid, в частности - с приложением Rails 3. Я использую ruby-openid для аутентификации с Google и использовал Seth Ladd's nice recipe, чтобы получить эту работу.Rails3 + OpenID == mmmmmm; Rails3 + JQGrid == mmmmmmm; Rails3 + OpenID + JQGrid == BZZZT

Что он делает - для просмотра страниц и POSTS из веб-форм.

Однако всякий раз, когда JQGrid делает POST для обновления данных на сервере, происходят две вещи:

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

  2. Как только сервер отправляет обратно 401, который должен инициировать переадресацию и аутентификацию, вся энчилада просто останавливается. Обычно (как, например, запрос POST из представления формы) браузер видит 401, читает прилагаемую «аутентификацию здесь», танец возвращается с установленным сеансом, и цикл продолжается. Но от JQuery/JQGrid ... не так много.

Любые идеи? Я уверен, что я пропустил что-то очевидное здесь, но у меня есть один из «неизвестных неизвестных» Рамсфелда, я не знаю, что это такое, что мне не хватает, а тем более, как это исправить! Похоже, это должна быть долго разрешенная проблема, а?

я мог быть запущен прервала XSS защиты, но если это так, я понятия не имею, как поступить, кроме * * -canning на серьезные инвестиции мы уже сделали в OpenID (в том числе пользователей, уже подписавшись &, имеющий для предоставления/запоминания паролей - ick!).

Заранее благодаритесь, мои коллеги-эксперты.

(Rails 3.0.7, рубиново-2.1.8, OpenID JQGrid 3.5.3, JQuery 1.3.2, используя Google в качестве ОР, так что пользователь не должен вводить свою идентичность URL.)

+0

Прежде всего, вы должны использовать более свежие версии jQuery и jqGrid. Кроме того, было бы лучше включить более подробные технические данные из заголовков HTTP, которые используются, и указать более четкие, какие дополнительные заголовки вы хотите отправить при обновлении данных. – Oleg

+0

Да, ты, несомненно, прав. Я не хотел делать большой дамп в деталях заголовка, если мне не хватало чего-то ослепительно очевидного. На самом деле я могу - похоже, что «защита_from_forgery», из всех вещей, возможно, была виновницей. Больше, когда я исследовал дальше. –

ответ

0

OK , дальнейшее тестирование подтверждает, что это обертка, дамы и джентльмены.

Конечно, мне нужно было выяснить, как заставить Javascript работать с защитой_from_forgery, но оказалось, что это очень просто, вы просто захватываете токен аутентичности и включаете его во все запросы Ajax, как описано в http://henrik.nyh.se/2008/05/rails-authenticity-token-with-jquery. Очень гладкий, так как этот метод автоматически создает токен во всем, вам не нужно искать все ваши POST-запросы.

Олег, спасибо вам за помощь. И я отвечу на ваш совет.

Спасибо тоже Sante в списке рассылки OpenID Code, который дал мне указатель на заголовок защиты protect_from_forgery.