【问题标题】:Ember.js Dynamically setting REST auth-token in RESTAdapter headersEmber.js 在 RESTAdapter 标头中动态设置 REST auth-token
【发布时间】:2014-09-06 04:20:20
【问题描述】:

这篇 SO 帖子 (Adding headers after RESTAdapter initialization) 是我编写代码的指南:

我的 auth REST 成功返回了一个令牌。我直接使用 AJAX 而不是通过 ember-data 因为这只是登录并获取授权令牌(embercast 指南)

  $.ajax({
    type: 'POST',
    contentType: 'application/json',
    url: 'api/auth',
    dataType: "json",
    data: postData,
    success: function(response){
      self.set('errorMessage', response.message);

      if (response.success) {

        self.set('token', response.token);
        self.set('loginstatus', 'success');

        var appController = self.get('controllers.application');
        appController.set('token', response.token);
        App.set('authToken', response.token);

        self.transitionToRoute('/');
      }

      if (response.message) {
        //console.log('login failed');
        //THIS CODE IS FAILED!!!
        //self.get('login').render("login-modal-failed", {
        //  into: 'application',
        //  outlet: 'modal'
        //});
      }
    },
    error: function() {
      alert("An error occurred while processing JSON file.");
    }
  });

这是 Chrome 网络信息和登录后受保护的主页。打印授权令牌。 (这只是我的 EMBER 应用学习和测试

正如您在 AJAX 代码中看到的,这是每次用户登录时要动态放入 RESTAdapter 标头的身份验证令牌的属性设置

App.set('authToken', response.token); 

这是 RESTAdapter 代码:

App.ApplicationAdapter = DS.RESTAdapter.extend({
   namespace: 'emberauthslimv3/api',

   headers: {
      'AUTH-TOKEN': function() {
         return {
           token : this.get('App.authToken') || localStorage.getItem('token')
         }
       }.property('App.authToken')
   }
});

我已经尝试了不同的标题设置组合,相信我,我这样做了大约 2 天,但从未成功地将令牌放入标题中。

当我查看 chrome 网络信息时,我得到的标题是这样的

AUTH-TOKEN:[object Object]

感谢任何帮助/指针:D

更新

在测试了各种组合后仍然失败,我放弃了,只使用了最简单的 hack,ajaxPrefiler 哈哈。至少它有效:

      if (response.success) {
        Ember.$.ajaxPrefilter(function( options, oriOptions, jqXHR ) {
          jqXHR.setRequestHeader("AUTH-TOKEN", response.token);
        });

        self.transitionToRoute('/');
      }

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    首先,当您拥有 Ember 文档时,您使用了一个错误的参考链接。问题是 ApplicationAdapter 中的标头实现。您正在返回具有每个标头属性的对象。

    App.ApplicationAdapter = DS.RESTAdapter.extend({
      headers: function() {
        return {
          "AUTH-TOKEN": Ember.get('App.authToken') || localStorage.getItem('token')
        };
      }.property().volatile()
    });
    

    顺便说一句,这里是链接。 http://emberjs.com/api/data/classes/DS.RESTAdapter.html#toc_headers-customization

    【讨论】:

    • 使用你的答案,AUTH-TOKEN 甚至没有插入到标题中。
    • 使用您更新的答案,标题中有 AUTH-TOKEN 但内容仍然相同:AUTH-TOKEN:[object Object]
    • 我放弃了哈哈,所以现在我只使用 Ember.$.ajaxPrefilter()。它有效
    • 我在这里实现并且工作正常github.com/thecodejack/lecture-mvc/blob/master/app/adapters/… 但我观察到 1 个问题..如果我实现了一个特定的模型适配器作为休息并且不传递标头信息,因为 ApplicationAdapter 已实现(带有这些信息) ,那个模型休息调用没有那些标题......
    • 我注意到您正在使用 ember-cli,很酷:D。我自己刚开始使用它,将再次尝试 RESTAdapter 中的动态标头设置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2015-05-11
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 2020-03-26
    • 2018-09-06
    相关资源
    最近更新 更多