Login 当Ember数据接收到http状态401时,Ember.js应用程序应重定向到登录
我希望我的Emberjs应用程序能够处理未经授权的HTTP状态(401) 应用程序使用ember数据集成JSON API(Rails) 当接收到HTTP状态Unauthorized(401)时,客户端层(Emberjs)应该重定向到一个Emberjs视图/模板,提示登录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
如何为整个应用程序执行此操作?我也遇到了同样的问题。我已经成功地实现了下面的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');
}
}
}
这应该由路由器现在处理,类似于: