Rails на iPhone с проблемами входа в JQTouch - PullRequest
2 голосов
/ 01 августа 2010

У меня есть приложение rails с мобильным просмотром с использованием jqtouch. Если приложение просматривается на iPhone, приложение application.mobile.erb загружается вместо приложения по умолчанию.HTML.erb.

Все отлично работает, кроме логина. Пользователи могут войти, а затем просматривать содержимое. Тем не менее, они должны войти в систему каждый раз, когда они загружают сайт. Есть ли способ заставить iPhone хранить учетные данные в виде файла cookie или аналогичного?

Я заметил, что если я просматриваю настольную версию на своем iPhone и регистрируюсь, мои учетные данные сохраняются, поэтому мне не нужно входить каждый раз. Как только я переключаюсь на специфическую для iPhone версию jqtouch, мне приходится каждый раз входить в систему.

Разница в том, что в настольной версии я вписываю данные для входа непосредственно в форму входа, которую я сделал, но в версии для iPhone jqtouch всплывающее окно из пользовательского интерфейса iPhone запрашивает информацию для входа.

Приложение использует плагин Restful Authentication: http://github.com/technoweenie/restful-authentication

Спасибо

Danny

Вы можете просмотреть приложение на github:

www.github.com/dannyweb/baseapp2

1 Ответ

1 голос
/ 15 августа 2010

Отказ от ответственности : Я довольно новичок в RoR, так что это мое лучшее предположение и может быть полностью не в порядке ...

Я заметил, что в ваших app/views/dashboard у вас есть index.html.erb и index.mobile.erb, поэтому я предполагаю, что вы используете суффикс .mobile для получения мобильных страниц, специфичных для вашего iPhone ... В ваших lib/authenticated_system.rb, Ваш метод отказа в доступе:

  def access_denied
      respond_to do |format|
        format.html do
          store_location
          redirect_to new_session_path
        end
        # format.any doesn't work in rails version < http://dev.rubyonrails.org/changeset/8987
        # you may want to change format.any to e.g. format.any(:js, :xml)
        format.any do
          request_http_basic_authentication 'Web Password'
        end
      end
    end

Этот метод вызывается всякий раз, когда неавторизованный пользователь пытается получить доступ к контенту (см. Ваш метод authorized, чтобы узнать, что квалифицирует пользователя как авторизованного). Этот метод отвечает на запросы в зависимости от запрошенного формата. То есть любые запросы .html попадают в блок format.html do. Поскольку блока format.mobile нет, все запросы .mobile попадают в блок format.any. Это приводит к поведению, которое вы объяснили в своем вопросе:

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

Другое различие между ними состоит в том, что format.html создает сеанс, а format.any запрашивает только учетные данные и не создает сеанс.

Рассматривали ли вы добавление блока format.mobile, чтобы указать, как система аутентификации должна обрабатывать запросы .mobile для создания сеанса (аналогично блоку format.html)? Можно даже попробовать использовать тот же метод request_http_basic_authentication (чтобы пользовательский интерфейс iPhone запрашивал учетные данные), но затем сделать что-то с предоставленными учетными данными, чтобы создать сеанс или файл cookie.

Опять же, я могу быть совершенно не в себе, но, надеюсь, мой ответ приносит больше пользы, чем вреда!

...