2012-03-09 48 views
0

主に、データテーブルグリッドの再描画を処理するJSONリクエストを処理するコントローラアクションがあります。しかし、私はこのbefore_filterを持っていて、セッションが破棄されたかどうかをチェックし、ログアウトアクションにリダイレクトする必要があります。リクエストがajaxリクエストの場合、リダイレクトはうまくいきます。しかし、リクエストがJSONの場合、ログには「フィルタチェーンが停止された:authorize render or redirected」というメッセージが表示されますが、ページはまったくリダイレ​​クトされません。すべての手がかりは?Rails 3.2.0 - JSON呼び出し後のリダイレクト

私はログが、それはJSONなどのアクションを処理していますことを示していることを参照してください。

Processing by UserController#datatable_redrawings as JSON 

マイContoller方法:

before_filter :auth 

def auth 
    if session[:username].blank? 
    flash[:error] = "Please login." 
    if request.xhr? 
     render :js => "window.location = '/logout'" 
    else 
     respond_to do |format| 
     format.html { redirect_to :action => "logout" } 
     end 
    end 
    end 
end 

答えて

4

リダイレクトは本当にRESTfulなではなく、またありますクライアントがJSON応答を期待しているときにJSを送信します。 Unauthorized(401)HTTPステータスコードなどを送信する必要があります。

before_filter :auth 

def auth 
    if session[:username].blank? 
    respond_to do |format| 
     format.json { render :json => [], :status => :unauthorized } 
     format.html { redirect_to :action => "logout" } 
    end 
    return false 
    end 
end 
+0

私はあなたの例を実装しようとしましたが、うまくいきませんでした。私は彼らが再びログインできるようにそれらをリダイレクトすることを期待しています。許可されていない状態を何に設定するのですか? – oprogfrogo

+0

あなたのクライアントは401を処理し、window.location = '/ logout' – danpickett

+0

を実行する必要がありますので、「無許可」という名前のコントローラメソッドを作成する必要がありますので、window.location = '/ logout'を実行できますか? – oprogfrogo

関連する問題