我的应用程序在使用MEAN堆栈构建的angularJs 1.6中运行良好,我使用护照进行身份验证。
当我决定使用离子进行测试时,应用程序本身运行良好(文件基本相同)但使用护照的身份验证已被破坏
我可以注册并登录用户,但是当我想检查用户是否在我的服务器上使用req.isAuthenticated()进行登录时,它总是回答错误。
我认为这是因为当我从普通的角度应用程序发出请求时,请求中包含一个带有密码和电子邮件的用户对象,但是当我使用离子应用程序时,用户丢失了
我花了一天时间来处理它,任何帮助都会很棒!
编辑1:
很抱歉不包含代码,这是我第一次体验
我的登录路线+我的登录功能
app.post('/api/login', login);
function login(req, res, next) {
//console.log(req);
passport.authenticate('local-login', function(err, user, info) {
if (err) {
return next(err); // will generate a 500 error
}
// Generate a JSON response reflecting signup
if (! user) {
return res.send({success : 'false', message : req.flash('loginMessage') });
}
req.login(user, function(err) {
if (err) { return next(err); }
//console.log(req);
return res.send({success : 'true', message : req.flash('loginMessage') });
});
})(req, res, next);
}
问题是,req.login被执行并且我获得了成功:是的,但是使用ionic / cordova应用程序,似乎没有任何记忆
之后,当我尝试检查用户是否使用此
进行登录时 app.get('/api/login/loggedin', function(req, res) {
res.send(req.isAuthenticated() ? req.user : '0');
});
我总是得到' 0',我认为这是因为cordova / ionic app不能使用cookies(请求之间的差异也是缺少来自离子的cookie),但我可以'了解如何管理一个适用于我的网络角应用程序和它的离子版本(仍然使用护照)的解决方案
答案 0 :(得分:0)
解决方案我刚发现:
事实上,这是一个CORS问题,因为我不确切知道为什么,但Ionic / cordova没有在帖子请求中提供{user:...}
信息
只需添加
var cors = require('cors');
app.use(cors({origin: 'http://localhost:8100', credentials: true}));
到您的服务器,它允许req包含所需的信息
并添加
{withCredentials: true}
将要使用isAuthenticated()检查的所有请求。例如:
$http.get('http://localhost:8081/api/todos', {withCredentials: true});
所以发送的请求包含{user:...}部分
我不确切地知道为什么你需要在客户端和服务器端对其进行授权,但它可以正常工作