我创建了一个角度为1.0.8的项目并设计了最后一个版本,在Rails 4上,一切都运行得很好,设计是在我没有登录时请求api发送响应401。 拦截器正在获得401并以我想要的方式处理它。 但后来决定升级到最后一个稳定版本1.2.1并且一切运行良好(只需要更改拦截器,而不是返回一个函数,返回一个对象),但由于某种原因设计现在重定向到sign_up页面而不是发送401响应,不知道发生了什么,因为我测试控制器响应状态::未授权,我的拦截器确实小心它。有人在迁移到1.2.1时已经遇到过这个问题吗?正如我所说,我改变的唯一代码是它自己的拦截器(它与我的401响应工作正常)。 我得到的是302 Found状态代码。
拦截器代码:
.config(function($httpProvider){
var interceptor = function($q, $location, $rootScope) {
return {
'responseError': function(rejection) {
if (rejection.status == 401) {
$rootScope.$broadcast('event:unauthorized');
console.log('got you trying to do something illegal...')
return rejection;
}
return $q.reject(rejection);
}
};
};
$httpProvider.interceptors.push(interceptor);
})
更新
所以经过一段时间的尝试,我意识到使用angularjs 1.2.1和Devise我需要得到401:
将.json格式添加到所有服务URL(需要身份验证,例如:api/events/:id.json
)。
确保config.navigational_formats = []
上config/initilizers/devise.rb
的数组中没有:json
。
并确保config.http_authenticatable_on_xhr = true
设置为true
。
但我还有一个问题,为什么在Angular.js 1.0.8上,即使navigational_formats
数组有:json
且服务没有.json
,这也有效?
它现在的方式是正确的吗?