2

jqtouch を使用したモバイル ビューの Rails アプリがあります。アプリケーションが iPhone で表示される場合、application.mobile.erb がデフォルトの application.HTML.erb の代わりにロードされます。

ログインを除いて、すべて正常に動作します。ユーザーはログインしてコンテンツを表示できます。ただし、サイトをロードするたびにログインする必要があります。iPhoneに資格情報をCookieなどとして保存させる方法はありますか?

iPhone でデスクトップ バージョンを表示してログインすると、ログイン資格情報が保存されるため、毎回ログインする必要がありません。iPhone 固有の jqtouch バージョンに切り替えると、毎回ログインする必要があります。

違いは、デスクトップ バージョンでは、作成したログイン フォームにログインの詳細を直接入力するのに対し、iPhone jqtouch バージョンでは、iPhone UI からのポップアップがログイン情報を要求することです。

アプリケーションは、Restful 認証プラグインを使用します: http://github.com/technoweenie/restful-authentication

ありがとう、

ダニー

アプリケーションは github で表示できます。

www.github.com/dannyweb/baseapp2
4

1 に答える 1

1

免責事項:私はRoRにかなり慣れていないので、これは私の最善の推測であり、完全にずれている可能性があります...

app/views/dashboardあなたの にindex.html.erbとがあることに気付きました。そのindex.mobile.erbため、iPhone 固有のモバイル ページを取得するために .mobile サフィックスを使用していると想定しています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 UI からのポップアップがログイン情報を要求することです。

2 つの他の違いはformat.html、セッションを作成するのに対し、format.any資格情報を要求するだけでセッションを作成しないことです。

format.mobileセッションが作成されるように認証システムが .mobile リクエストを処理する方法を指定するブロックを追加することを検討しましたか (format.htmlブロックと同様)。同じ request_http_basic_authentication メソッドを使用して (iPhone UI が資格情報を要求するようにすることもできます)、送信された資格情報を使用してセッションまたは Cookie を作成することもできます。

繰り返しますが、私は完全に的外れかもしれませんが、私の答えが害よりも役立つことを願っています!

于 2010-08-15T19:22:42.003 に答える