我正在使用Angular 1.6.4,Express 4.15.2和express-session。 我试图通过检查req.session.user参数的存在来捕获用户是否未经授权访问某个路由。如果他不是,我想发送401响应状态并改变Angular中的状态。
问题是我没有得到任何响应对象来检查状态。 我已经尝试使用拦截器,注销error.response.body,注销所有内容以确定我丢失响应对象的位置。
以下是一些代码,非常感谢任何帮助!
快递:
app.get('/update', sessionCheck, function(req, res) {
res.send('session');
});
function sessionCheck(req, res, next){
if(req.session.user) {
next();
} else {
console.log('before');
return res.status(401).send('Unauthorized');
console.log('after');
}
}
角:
.state('update', {
url: '/update',
views: {
"": {
templateUrl: 'templates/update.html',
controller: function($http) {
return $http.get('/update').then(function(response) {
console.log('Ok response' + response);
}, function(error) {
console.log('Error response' + error.response.body);
});
},
},
"carousel": {
templateUrl: "templates/carousel.html"
},
"footer": {
templateUrl: "templates/footer.html"
}
}
})
答案 0 :(得分:0)
您是否尝试使用拦截器执行此操作?
您可以尝试这种方式:
newTime
})
请注意,我们正在处理 responseError 。
您还需要在配置函数中注册拦截器:
int number = keyCode[1]-'0';
您可以看到有关此拦截器的更多信息:
Capture HTTP 401 with Angular.js interceptor
<强>更新强>
您也可以这样注册拦截器:
anyModule.service('yourInterceptor', function($q) {
var service = this;
service.responseError = function(response) {
if (response.status == 401){
//do something
}
return $q.reject(response);
};
然后以这种方式注册拦截器(在模块的配置中):
$httpProvider.interceptors.push('yourInterceptor');
请注意,您在 responseInterceptors 中推送拦截器。这项工作对我而言。