2012-01-27 6 views
5

私は、アプリケーションをdeviseと30分のセッションタイムアウトで保護しています。すべてのユーザーが通常のナビゲーションでうまくいきます。ユーザーがタイムアウトしたときにリンクをクリックすると、「セッションが切れました。ログインして続行してください。」というメッセージが表示され、ログイン画面に戻ります。DevTimeを使用したRoRでのセッションタイムアウトメッセージ

しかし、私は多くの場所でajaxを持っています。セッションがタイムアウトしてユーザーがajax操作を実行した場合、私はバックグラウンドで401エラーで黙って失敗するのではなく、上記と同じ動作が必要です。

これまでのところ、私は、各ページでこのjqueryのコード401Sをキャッチし、再ロードする必要があります。

$(document).ajaxError(function(e, error) { 
    switch(error.status) { 

    case 401: { 
     // unauthorised (possible timeout) 
     location.reload(); 
     break; 
    } 

をそれは十分に動作しますが、迷惑な問題がある:

AJAX要求ヒットが最初に考案しているので私のアプリケーションがページをリロードしてログインページに向かいますが、タイムアウトメッセージが表示されない場合は、認証されていない「サインインまたはサインアップしてから続行する必要があります」というメッセージが表示されます。メッセージ。

2番目のリクエストdeviseにタイムアウトメッセージが表示されるようにする方法はありますか?

答えて

2

このメッセージを手動で表示する必要があると思います。たとえば、特定のURLにリダイレクトするか、クエリパラメータを設定するなどです。

問題は401リクエスト後に新しいセッションが得られ、ブラウザをリロードすると次のリクエストが空のセッションでアプリケーションに当たってしまうという問題があります。そのため、認証されていないメッセージが表示されます。

1

タイムアウト・メッセージ「あなたのセッションの有効期限が切れて継続するには、再度ログインしてください。」そう一つのアプローチは、ちょうどそれを表示するようになり、xhr.responseTextで提供されています:これは良く流れているようだ私には

$(document).ajaxError(function(e, error) { 
    switch(error.status) { 

    case 401: { 
     // unauthorised (possible timeout) 
     location.reload(); 
     alert(xhr.responseText); 
     break; 
    } 

:クリックしてくださいをAjaxフォームで更新すると、セッションがタイムアウトしたことを知らせるメッセージが表示され、サインインページのフラッシュで「続行する前にサインインまたはサインアップする必要がある」を参照してください。

関連する問題