1

これが本当にばかげた質問であるか、私が本当に愚かなことをした場合、私はまだ初心者です。私はセッションタイムアウトメカニズムを実装しようとしていますが、これについてSOでいくつかの有用な質問/回答を見つけました。last_seen時間をセッション変数として追加し、これをアプリケーションコントローラーのbefore_filterでチェックしています。これは、設定された間隔を超えると、ユーザーをログオンページに戻します。

アプリケーションコントローラー

reset_session if session[:last_seen] < 1.minutes.ago

if session[:user_id] == nil
  redirect_to login_path, notice: "Please log in"
  return
end

session[:last_seen] = Time.now

これはほとんどのページで正常に機能しますが、タブが選択されているときにjqueryを使用してパーシャルを使用してコンテンツを変更する、タブ付きのページがいくつかあります。

リンクコード:

<li class="<%=get_active('index_audit','ultra')%>"><%= link_to 'Load  IT Estate', ultraaudit_path, remote: true %> </li>

コントローラーコード:

def index_audit

  @subscription = current_subscription

  respond_to do |format|
    format.js
  end

end

divをレンダリングされたパーシャルに置き換えるJSを持つindex_audt.jsがあります

タイムアウトが発生し、次のアクションがタブをクリックして次のページをレンダリングする場合、コードは実行されますが、ブラウザにログインページは表示されません。

RubyMineでデバッグしていると、コンソールにログインページ(sessions / new)をレンダリングしようとしていることが表示されます。

Processing by UltraController#index_audit as JS
Parameters: {"locale"=>"en-GB"}
Redirected to http://localhost:3000/?locale=en-GB
Filter chain halted as :logged_in rendered or redirected    
Completed 302 Found in 6ms (ActiveRecord: 0.0ms)


Started GET "/?locale=en-GB" for 127.0.0.1 at 2012-06-14 11:28:44 +0100
Processing by SessionsController#new as JS
Parameters: {"locale"=>"en-GB"}
Rendered sessions/new.html.erb within layouts/application (16.0ms)
Completed 200 OK in 323ms (Views: 320.6ms | ActiveRecord: 0.0ms)

しかし、それはブラウザに表示されません

index_auditコントローラーメソッドの先頭にリダイレクトを配置しようとしましたが、同じ問題があります。私の理論では、リモート:trueが原因ですが、それを修正するために何をすべきかわかりません。誰か助けてもらえますか?

4

2 に答える 2

1

(Rails 3.0から3.1にアップグレードした後に行ったように)この問題が発生した人には、提案された修正が機能しないか、自分の修正とは異なっていました。

:remote => trueform_forタグから削除すると、送信とリダイレクトが通過できるようになりました。最後のフォームは応答を得るためにajaxを使用していなかったので、これは理にかなっています。

これが他の誰かに役立つことを願っています!

于 2012-11-17T02:13:42.177 に答える
0

ユーザーのセッションがまだ有効である場合、index_auditアクションはJSを返しますが、ユーザーのセッションが期限切れになると、ログインページのHTMLを返します。おそらく、リモートハンドラーはJS形式を期待しているため、ログインページを含むHTML応答で何ができるかはわかりません。

おそらく最善のアプローチは、にformat.jsオプションを追加SessionsController.newし、必要なビューを作成するnew.js.erbことです。これにより、javascript形式を要求した場合、セッションの有効期限が切れているかどうかに関係なく、常にjavascriptを取得できます。

于 2012-06-14T12:29:27.080 に答える