我有一个基于node.js,express,angular(带路由)和mongo的web应用程序。身份验证通过Passport.js处理。
我的角度视图通过http请求与服务器交互。假设我发送了一个类型的请求:
$http.get('/api/getMyData').success(function(data) {})...
我在服务器上的:
app.get('/api/getMyData',function(req, res) {
if(!req.user){
// if the session expired
res.render('login.ejs',{message:'Session expired. Please login again.'});
使用此代码,如果会话已过期,我希望将用户重定向到登录页面。
现在,这不起作用,我没有被重定向到登录。即使我console.log(req.user)
生成undefined
而req.user==undefined
提供true
,res.render
中的if
也无效。如果我尝试使用res.redirect('login');
我收到404错误,指出/api/login
不存在。
我真的迷失了这一点,任何帮助都将受到高度赞赏。
答案 0 :(得分:2)
您的$http.get()
正在从res.render()
获取内容。
您可以在console.log(data);
中添加$http.get().success()
来查看此内容
如果api出现错误,您需要向客户端添加一些逻辑以重定向。
类似的东西:
<强> server.js 强>
app.get('/api/getMyData', function(req, res) {
if(!req.user) {
res.status(401);
return res.json({
status: 'error',
message: 'Unauthorized'
});
}
return res.json({
status: 'success',
// Stuff
});
}
角
$http.get('/api/getMyData').success(function(data) {
// Do something
}).error(function(data, status) {
// Handle the error
});
注意:这是未经测试的,但它会给你一个大致的想法。可能有一个更优雅的解决方案。
答案 1 :(得分:0)
我实现了与@Jordonias建议类似的东西。
我从服务器获取用户(null
如果会话已过期),
如果用户是null
,我使用$window.location.href="/login";
注销用户。
感谢@Jordonias。欢迎更好的替代品。