Emberjs アプリケーションで HTTP Status Unauthorized (401) を処理したい。
このアプリケーションは、ember-data を使用して JSON API (Rails) を統合します。
クライアント レイヤー (Emberjs) は、HTTP ステータス Unauthorized (401) を受信した場合、ログインを要求する Emberjs ビュー/テンプレートにリダイレクトする必要があります。
アプリケーション全体でこれを行うにはどうすればよいですか?
Emberjs アプリケーションで HTTP Status Unauthorized (401) を処理したい。
このアプリケーションは、ember-data を使用して JSON API (Rails) を統合します。
クライアント レイヤー (Emberjs) は、HTTP ステータス Unauthorized (401) を受信した場合、ログインを要求する Emberjs ビュー/テンプレートにリダイレクトする必要があります。
アプリケーション全体でこれを行うにはどうすればよいですか?
私は同じトピックについて調査していましたが、ここの情報は少し古くなっているようです. 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');
}
}
}
私は、より良い方法はEmberの約束を使用することだと考えています:
@store.get("user").then(=>
# Success stuff here
).fail(=>
@transitionTo("login") # Do other fancy error stuff here too
)
これに関する問題は、すべてのルートで個別に実行する必要があることです。beforeTransitionおそらく、プロミスが返すものをチェックして、メソッドで何かを行うことができますか? 考えるだけの食べ物です。