当ember-data接收http状态401时,Ember.js应用程序应重定向到登录

Jac*_*cob 5 login ember.js ember-data

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

该应用程序使用ember-data集成JSON API(Rails).

当接收HTTP状态未授权时,客户端层(Emberjs)应该重定向到提示登录的Emberjs视图/模板(401).

我怎样才能在整个应用程序中执行此操作?

Mir*_*kov 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;
Run Code Online (Sandbox Code Playgroud)

这与文档描述的方式相同:请阅读此处

更新:在较新版本的Ember和Ember Data中,错误对象结构会有所不同.状态将是一个字符串,包含在错误数组中的错误对象中:

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


小智 5

我一直在努力解决同样的问题.我已经成功实现了以下黑客攻击.

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' )
)
Run Code Online (Sandbox Code Playgroud)

想法是捕获jQuery ajaxError事件.如果您可以检查错误类型(.eg request.status == 401),导致错误的URL(例如settings.url),并根据该信息您可以决定该怎么做.

希望这可以帮助

  • 这应该由路由器现在处理,类似于:http://stackoverflow.com/questions/17981563/ember-data-handling-401s (3认同)