Rails3 + OpenID == мммммм; Rails3 + JQGrid == ммммммм; Rails3 + OpenID + JQGrid == BZZZT

Попытка использовать виджеты JQuery, в частности JQGrid, с приложением Rails 3. Я использую ruby-openid для аутентификации в Google и использовал хороший рецепт Сета Лэдда, чтобы заставить его работать.

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

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

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

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

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

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

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

(Rails 3.0.7, ruby-openid 2.1.8, JQGrid 3.5.3, JQuery 1.3.2, использующий Google в качестве OP, чтобы пользователю никогда не приходилось вводить свой идентификационный URL.)

1 ответ

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

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

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

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

Другие вопросы по тегам