【发布时间】:2018-09-26 07:05:48
【问题描述】:
我有一个使用邮递员完美运行的系统,我可以 POST 到
localhost:1337/api/user/login 和 username 和 password 在请求正文中设置。然后验证登录并允许我访问更多呼叫。 (并且反复致电localhost:1337/api/user/login 承认我已经记录并回复)。
当我检查服务器时,我注意到邮递员确实在我发出的每个请求中都发送了(htmlonly)cookie。
现在我尝试通过 sencha 6.5 modern 进行相同的登录。在某些控制器中,我有以下代码:
const form = this.getView();
if (form.isValid()) {
const data = form.getValues();
const u = 'http://localhost:1337/api/user/login'; //form.getUrl();
debugger;
Ext.Ajax.request({
url: u,
method: 'POST',
params : data,
success: function(response, opts) {
const obj = Ext.decode(response.responseText);
console.dir(obj);
},
failure: function(response, opts) {
console.log('server-side failure with status code ' + response.status);
}
});
}
这对数据库进行了“正确”调用,并且我看到了预期的凭据。但是我注意到,在未来的任何调用中,会话 cookie 都不会被发送存储(chrome 不会存储 cookie),并且每次发送/创建一个 new 会话 cookie。
是什么造成了这种差异?为什么 sencha/chrome 不存储 cookie?
为了完整起见,sails 中的服务器(使用 expressjs 会话存储)转到:
login: async function(req, res) {
try {
const user = await User.findOne({username: req.body.username});
const sess = req.session;
if (sess.userId === user.id) {
res.json({succes: false, message: 'already logged in'});
return;
}
if (!user) {
res.json({success: false, message: 'Authentication failed. User not found.'});
} else {
// check if password matches
const valid = await comparePromise(req.body.password, user.password);
if(valid) {
// if user is found and password is right
req.session.userId = user.id;
res.json({success: true, user: user});
} else {
res.forbidden(JSON.stringify({ success: false, message: 'Authentication failed. Wrong password.' }));
}
}
} catch (err) {
console.log(err);
res.badRequest(JSON.stringify({success: false, message: err.message}));
}
},
【问题讨论】:
-
您的 Sencha Modern 应用程序是否与后端位于同一台服务器上? (如果是这样,为什么要使用完全限定的端点 URL?)
-
不,这是在测试期间——它们都在我的开发电脑上运行在不同的端口上。一个是在端口 1337 通过
npm start运行的sails 服务器-另一个在端口1841 通过sencha app watch运行。给出完全限定的url 来强调这个“点”(表单url 后面的实际代码检查前端是否是为调试或生产而构建的)。 -
恕我直言,问题是 CORS 问题。我不知道如何解决它,但是如果您改写您的问题以强调您的请求是跨域的并添加 CORS 标签,那么有人可能会帮助您。您甚至可以尝试通过使用 ES6 fetch 或纯 XmlHttpRequest 制作示例来完全移除 Sencha。
标签: javascript session cookies extjs sails.js