11293


以下のような、ユーザがログインしているかどうかを判別するメソッドがあるとします。

[code]

    class Api::SessionsController < Api::ApplicationController
      # GET /api/sessions/verify
      def verify
        if user_signed_in?
          head :ok
        else
          head :unauthorized
        end
      end
    end
    
[/code]

jQueryからこれを叩くとすると、以下のようになると思っています。

[code]

    class @Session
      @verify: ->
        $.ajax
          type: 'GET'
          url: '/api/sessions/verify'
        .done ->
          true
        .fail ->
          false
    
    # 認証済みかどうか判断する
    
    Session.verify()
      .done ->
        # ok
      .fail ->
        # unauthorized
    
[/code]

以上で、認証済みかどうかは処理できたのですが、ブラウザのコンソールに以下のようなエラーメッセージが表示されます。

[code]

    GET http://localhost:3000/api/sessions/verify 401 (Unauthorized)
    
[/code]

これが表示される理由は分かるのですが、こういったエラーメッセージは、開発者が意図しない場合にのみ表示されるべきだと理解しており、意図しているケースのため表示したくありません。  
一般的に、APIサーバが返す `> 400` なコードをjQuery側から処理する場合、どのように実装すればよいのでしょうか？


CC BY-SA 3.0
2015-06-12T02:19:45.393
11267
2015-06-12T13:28:36.223
2015-06-12T13:02:45.200
8000
8786
question
javascript ruby-on-rails jquery google-chrome
Ajaxで401が返ってきても、コンソールにエラーが出力されないようにしたい


Google Chrome での次のような挙動について仰っているのだと思いますが・・・

![screenshot](https://i.stack.imgur.com/Qtg1o.png)

これはブラウザから投げられる全てのリクエスト（`<img>` タグ等も含む）について Chrome 内部でやっていることで、現状これを Javascript
側から制御することはできません。過去にバグ報告もあったようですが、結局は **開発者ツールの設定で** そのようなエラーを隠す機能が実装されただけでした。

<https://code.google.com/p/chromium/issues/detail?id=124534>

もしどうしてもこのようなエラーを表示したくないのであれば、ステータスコードは 200 のまま、レスポンスボディで API
の返答を表すことになるかと思います。

余談ですが、 401 はそのリソース（この場合
`/api/sessions/verify`）にアクセスするために認証が必要、という印象があるので、いずれにせよ 401 を返すことには違和感があります。


CC BY-SA 3.0
2015-06-12T13:28:36.223
11293
2015-06-12T13:28:36.223
8000
11267
answer