Jac*_*cob 5 login ember.js ember-data
我希望我的Emberjs应用程序处理HTTP状态未授权(401).
该应用程序使用ember-data集成JSON API(Rails).
当接收HTTP状态未授权时,客户端层(Emberjs)应该重定向到提示登录的Emberjs视图/模板(401).
我怎样才能在整个应用程序中执行此操作?
我正在研究相同的主题,看起来这里的信息有点过时了.使用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),并根据该信息您可以决定该怎么做.
希望这可以帮助