2

私のセットアップは次のとおりです。

残り火: 1.1.0-beta.1

Ember データ: 1.0.0-beta.2

# ON STARTUP
APP.ApplicationAdapter = DS.RESTAdapter.extend(
  headers: {
    'X-API-TOKEN': localStorage.token
  }
)

更新時にすでにログインしている場合、これは正常に機能します...

でも...

#ON LOGIN FORM SUBMIT ACTION
$.post('/sessions', data).then( (response) =>
  if response.token
    localStorage.token = response.token
    APP.ApplicationAdapter = DS.RESTAdapter.reopen(
      headers: {
        'X-API-TOKEN': localStorage.token
      }
    )
  else
    @set('error_message', response.error)

呼び出しはまだ許可されておらず、アダプターは古いトークンを渡そうとし続けます。

したがって、基本的にアダプターの「ヘッダー」プロパティは「reopen」メソッドによって更新されません。ember-data のアダプタを変更する適切な方法は何ですか?

みんなありがとう

4

2 に答える 2

2

ヘッダーは、計算されたプロパティとして使用して、動的ヘッダーをサポートできます。volatile 関数を使用してプロパティを非キャッシュ モードに設定し、リクエストごとにヘッダーが再計算されるようにすることができます。

APP.ApplicationAdapter = DS.RESTAdapter.extend(
  headers: function() {
    return {
      'X-API-TOKEN': localStorage.token 
    };
  }.property().volatile()
)

URL:

toc_headers-カスタマイズ

method_volatile

于 2014-10-28T06:16:31.310 に答える
2

インスタンス化したら、コンテナーからアダプターを取得する必要があります。

ただし、どこからリクエストを行っているのかがはっきりしないため、次のようにしてみてください。

#ON LOGIN FORM SUBMIT ACTION
$.post('/sessions', data).then( (response) =>
  if response.token
    localStorage.token = response.token

    adapter = APP.__container__.lookup 'adapter:Rest'
    adapter.set('headers', { 'X-API-TOKEN': localStorage.token })

  else
    @set('error_message', response.error)

注:App.__container__要求を行っている場所によっては、実稼働コードでの使用は推奨されません。よりクリーンな方法でコンテナーを取得する方が適切です。

最後のコメントに応じて更新する

コントローラーでコンテナーにアクセスする必要がある場合は、次のようにします。

APP.LoginController = Ember.ObjectController.extend
  ...
  adapter = @get('container').lookup 'adapter:application'
  adapter.set('headers', { 'X-API-TOKEN': localStorage.token })
  ...

アダプターを入手する必要があります。

それが役に立てば幸い。

于 2013-09-23T09:40:58.190 に答える