Sails.js节点服务器req.session始终为空,使用Passport-local策略。

http://localhost:4200上运行应用程序应用程序。
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)它现在总是空的。 不pipe我做什么。

我在我的服务器上启用了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' }; 

在我的烬适配器,我有这样的:

 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 } } 

我怀疑这仍然是一个问题,因为它是如此之旧,但有时我的ExpressJS应用程序中使用快速会话( https://github.com/expressjs/session ),并且必须显式调用req.session.save(callback),以便会话保存回我正在使用的商店。 如果护照会话支持中存在等价物,则可以在更新会话中的值后尝试显式调用它。

您需要在自定义控制器中添加一个Get

所以例如,

代替:

 process_survey: function(req, res){ console.log(req.session) } 

写:

 "Get process_survey": function(req, res){ console.log(req.session) }