【发布时间】:2015-09-28 07:53:24
【问题描述】:
让 ember 应用在 http://localhost:4200 上运行。
Sails 应用程序在 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 总是空的?
编辑:这些是在 cmets 中要求的:
/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
}
}
【问题讨论】:
-
您是否配置了会话?里面有
config/http.js&config/session.js -
@Bwaxxlo 将这些文件添加到问题中。
-
首先,这永远不会评估为真
if(req.body === {})。{} !== {},对象是通过引用而不是通过属性进行比较的。其次,在config/http.js中注释掉cookieParser和session,因为您使用的是自己的特殊中间件(即:Passport) -
另外,如果您关注this tutorial,请确保您已创建
config/passport.js -
@Bwaxxlo 比较了 StackOverflow 的编辑,而不是我的代码中的编辑。我确实离开了那个教程,我确实创建了一个
config/passport.js。注释掉session和cookieParser很有趣,因为这不是我在sails 文档或该教程中看到的任何内容。我试试看,谢谢。
标签: javascript node.js ember.js sails.js passport.js