21

認証before_filter :authenticate_user!されたユーザーのみにアクセスを制限するために使用します。

いずれにせよ、認証されていないユーザーが制限されたページにアクセスしようとすると、devise は自動的にサインインページへのリダイレクトを引き起こします。

したがって、 http://localhost:3000/users/editを開こうとすると、 http://localhost:3000/users/sign_inにリダイレクトされます。

ここで、リンクhttp://localhost:3000/users/editを として定義すると、devise はJS 経由で401 ステータス コード:remote => trueのみを発行します。

その状況にエレガントに対処し、ログインダイアログをオーバーレイまたはリダイレクトで表示するには、リモート以外のバリアントが行うようにするにはどうすればよいですか?

デバイスは、私が単にアクティブにする必要があるその状況に対してデフォルトの戦略を提供しますか?

4

7 に答える 7

16
$(document).ajaxError(function (e, xhr, settings) {
        if (xhr.status == 401) {
           $('.selector').html(xhr.responseText);
        }
    });
于 2012-07-03T09:13:23.440 に答える
1

「:remote => true」を実行している場合は、「ajax:error」イベントバインディングで.liveを使用できます。

$('#member_invite, #new_user')
        .live("ajax:success", function(evt, data, status, xhr){
          $.colorbox.close();
        })
        .live("ajax:error", function(evt, data, status, xhr){
          alert("got an error");
        });

ここで、「#new_user」はフォームIDの値になります。

すでにオーバーレイまたはダイアログがある場合のより洗練された方法は、単にメッセージを挿入することであることに注意してください。したがって、alert()の代わりに:

$('.messages').html('Invalid email or password');

サインインフォームでは、

<div class="messages"></div>

または、必要に応じて、フォームのタイトルを置き換えることもできます。

于 2012-05-05T00:21:08.277 に答える