Login 当Ember数据接收到http状态401时,Ember.js应用程序应重定向到登录

Login 当Ember数据接收到http状态401时,Ember.js应用程序应重定向到登录,login,ember.js,ember-data,Login,Ember.js,Ember Data,我希望我的Emberjs应用程序能够处理未经授权的HTTP状态(401) 应用程序使用ember数据集成JSON API(Rails) 当接收到HTTP状态Unauthorized(401)时,客户端层(Emberjs)应该重定向到一个Emberjs视图/模板,提示登录 如何为整个应用程序执行此操作?我也遇到了同样的问题。我已经成功地实现了下面的hack window.App = Em.Application.extend ready: -> $(document).ajaxE

我希望我的Emberjs应用程序能够处理未经授权的HTTP状态(401)

应用程序使用ember数据集成JSON API(Rails)

当接收到HTTP状态Unauthorized(401)时,客户端层(Emberjs)应该重定向到一个Emberjs视图/模板,提示登录


如何为整个应用程序执行此操作?

我也遇到了同样的问题。我已经成功地实现了下面的hack

window.App = Em.Application.extend
  ready: ->
    $(document).ajaxError( (event, request, settings) =>
      if request.status == 401 && !["/profile", "/users/sign_in.json"].contains(settings.url)
        controller = App.__container__.lookup('controller:application')
        controller.transitionToRoute('sign_in' )
)
其思想是捕获jQuery ajaxError事件。在这种情况下,您可以检查错误的类型(.e.request.status==401)、导致错误的url(e.settings.url),并根据这些信息决定要做什么


希望这有帮助

我在想一个更好的方法是使用余烬的承诺

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

问题是,这必须在所有路线上单独进行。也许您可以使用
beforetransformation
方法来检查承诺返回的内容?值得思考。

我在研究同一主题,这里的信息似乎有点过时。使用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;
这与文档描述的方式相同:

更新:在更新版本的余烬和余烬数据中,错误对象结构将略有不同。状态将是一个字符串,包含在错误对象、错误数组中:

actions: {
  error: function(error, transition) {
    if (error.errors[0].status === '401') {
      this.transitionTo('sign-in');
    }
  }
}

这应该由路由器现在处理,类似于: