5

sessions_helper に次のコードがあります。

 def current_user
   @current_user ||= User.find_by_remember_token(cookies[:remember_token])
 end

これで、任意のコントローラーから current_user を呼び出して、現在のユーザーを取得できます。( RailstutorialRailscastsと同様に、最初から認証を使用しています)。

lookup_resultサーバーをチェックして特定の結果の準備ができているかどうかを確認するajax リクエストを呼び出しました。

 $.get("/lookup_result?id=<%=id%>");

次のコントローラーメソッドに移動します。

def lookup result
  user = current_user 
  # do things with user...
end

通常はこれで問題なく動作しますが、Rails が current_user の取得に失敗することがあります。問題は、Cookie または CSRF トークンが ajax リクエストを通過できないことがあると思われますが、通常はなぜ機能するのでしょうか? 常に機能するように修正するにはどうすればよいですか?

更新:
エラーを再現する方法がわかりません。そのリクエストを送信するページにアクセスできるのは、サインインしたユーザーだけです (ただし、誰かが ajax リクエストをサインインしていない別のブラウザーにコピーすることはできます)。ロールバーでエラーを報告し、リクエスト データを保存します。

これは、current_user が失敗した場合の user-agent の通常のデータです。

Mozilla/4.0 (互換性あり; MSIE 7.0; Windows NT 5.1; InfoPath.1; ...)

これは、Ajax 経由でセッション情報を送信する Internet Explorer に何らかの問題があることを意味します。誰でもこれを修正する方法を知っていますか?

以下に、返されるすべてのデータ カテゴリを示しますが、「セッション」が含まれているものはすべて空です。

タイムスタンプ
message.request_data.headers.Accept
message.request_data.headers.Accept-Encoding
message.request_data.headers.Accept-Language
message.request_data.headers.Cf-Connecting-Ip //(CF は cloudflare の略)
message.request_data.headers .Cf-Ipcountry
message.request_data.headers.Cf-Ray
message.request_data.headers.Cf-Visitor
message.request_data.headers.Connection
message.request_data.headers.Host
message.request_data.headers.User-Agent
message.request_data.headers .Version
message.request_data.headers.X-Forwarded-For
message.request_data.headers.X-Forwarded-Port
message.request_data.headers.X-Forwarded-Proto
message.request_data.headers.X-Request-Start
message.request_data.method
message.request_data.params.... //(各種パラメータ表示)
...
message.request_data.session.defer //(これらすべてのセッション項目空)
message.request_data.session.domain
message.request_data.session.expire_after
message.request_data.session.httponly
message.request_data.session.id
message.request_data.session.path
message.request_data.session.renew
message.request_data.session .secret
message.request_data.session.secure
message.request_data.url
message.request_data.user_ip
server.host

4

2 に答える 2