5

Emberjs アプリケーションで HTTP Status Unauthorized (401) を処理したい。

このアプリケーションは、ember-data を使用して JSON API (Rails) を統合します。

クライアント レイヤー (Emberjs) は、HTTP ステータス Unauthorized (401) を受信した場合、ログインを要求する Emberjs ビュー/テンプレートにリダイレクトする必要があります。

アプリケーション全体でこれを行うにはどうすればよいですか?

4

3 に答える 3

8

私は同じトピックについて調査していましたが、ここの情報は少し古くなっているようです. Ember 1.7.0 を使用して、ルートのエラーを処理する必要があります。これをアプリ全体に適用したい場合は、次のApplicationRouteようにクラスに追加する必要があります

// app/routes/application.js
import Ember from 'ember';

var ApplicationRoute = Ember.Route.extend({
    actions: {
        error: function (error, transition) {
            // Handle the error here
            if (error && error.status === 401) {
                return this.transitionTo('login');
            }
        }
    }
});

export default ApplicationRoute;

これは、ドキュメントで説明されているのと同じ方法です:こちらをお読みください

更新: Ember および Ember Data の新しいバージョンでは、エラー オブジェクトの構造が少し異なります。ステータスは、エラー配列内のエラー オブジェクト内に含まれる文字列になります。

actions: {
  error: function(error, transition) {
    if (error.errors[0].status === '401') {
      this.transitionTo('sign-in');
    }
  }
}
于 2014-08-28T13:44:55.617 に答える
0

私は、より良い方法はEmberの約束を使用することだと考えています:

@store.get("user").then(=>
    # Success stuff here
).fail(=>
    @transitionTo("login") # Do other fancy error stuff here too
)

これに関する問題は、すべてのルートで個別に実行する必要があることです。beforeTransitionおそらく、プロミスが返すものをチェックして、メソッドで何かを行うことができますか? 考えるだけの食べ物です。

于 2014-08-16T22:14:01.563 に答える