在http://localhost:4200
上运行ember应用
Sails App正在http://localhost:1337
上运行。
我对预注册调查制定了政策。所以在/api/controllers/ProcessSurveyController.js
的帆上我有这个:
module.exports = {
process_survey: function(req, res){
if(req.body === {} || req.body === null){
res.status(400);
return res.send({err: "something bad happened"});
}
var params = req.body;
req.session.user = {};
if(params.p_1 === '1' && params.p_2 === '1' && params.p_3 === '0' && params.p_4 !== "Bad Param"){
req.session.user.qualifies = true;
res.status(200);
return res.send({message: 'user qualifies', status: 'good'});
}else{
req.session.user.qualifies= false;
res.status(200);
return res.send({message: "user fails to qualify", status: "bad"});
}
}
};
然后,我在api/policies/Qualifies.js
module.exports= function(req, res, next){
if(req.session.user.qualifies){
return next();
}else{
res.status(400);
return res.send({status: 400, message: 'User does not qualify.'});
}
};
我适用于api/UserController.js
唯一的问题是,每当我从Ember发布到我的UserController.create
方法时,我都会收到来自该政策的错误cannot read property qualifies of undefined.
如果我sails.log.verbose(req.session)
此时它总是空着的。无论我做什么。
我在我的服务器上启用了cors
,我的/config/cors.js
有以下选项:
module.exports.cors = {
allRoutes: true,
origin: 'http://localhost:4200',
credentials: true,
methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
headers: 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'
};
在我的ember适配器中,我有这个:
export default DS.RESTAdapter.extend({
host: 'http://localhost:1337',
ajax: function(url, method, hash){
hash.crossDomain = true;
hash.xhrFields = {withCredentials: true};
return this._super(url, method, hash);
}
});
显然我错过了一些重要的东西,但我只是不知道是什么,而且我已经用完了谷歌查询的想法。 为什么我的req.session总是空着?
编辑:评论中要求提供这些内容:
/config/http.js
的内容:
module.exports.http = {
middleware: {
passportInit: require('passport').initialize(),
passportSession: require('passport').session(),
order: [
'startRequestTimer',
'cookieParser',
'session',
'passportInit',
'passportSession',
'myRequestLogger',
'bodyParser',
'handleBodyParserError',
'compress',
'methodOverride',
'poweredBy',
'$custom',
'router',
'www',
'favicon',
'404',
'500'
]
}
/config/session.js
module.exports.session = {
secret: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
cookie: {
maxAge: 48 * 60 * 60 * 1000
}
}
答案 0 :(得分:1)
我怀疑这仍然是一个问题,因为它已经很老了,但我的ExpressJS应用程序中有时会使用快速会话(https://github.com/expressjs/session)并且必须显式调用req.session.save (回调),以便会话保存回我正在使用的商店。如果护照的会话支持中存在等效内容,则可能会在更新会话中的值后尝试显式调用它。
答案 1 :(得分:0)
您需要在自定义控制器中添加Get
。
例如,
而不是:
process_survey: function(req, res){
console.log(req.session)
}
写道:
"Get process_survey": function(req, res){
console.log(req.session)
}
答案 2 :(得分:0)
我刚刚将会话添加回现有的Sails应用程序中。在我的情况下,问题是通过.sailsrc
文件禁用了会话(当然这花了我一些时间)。如果发生此问题:只需从该文件中删除"session": false
行,然后添加session
属性。