【问题标题】:Sails.js Node server req.session is always empty, using Passport-local strategy.Sails.js 节点服务器 req.session 始终为空,使用 Passport-local 策略。
【发布时间】: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 中注释掉cookieParsersession,因为您使用的是自己的特殊中间件(即:Passport)
  • 另外,如果您关注this tutorial,请确保您已创建config/passport.js
  • @Bwaxxlo 比较了 StackOverflow 的编辑,而不是我的代码中的编辑。我确实离开了那个教程,我确实创建了一个config/passport.js。注释掉sessioncookieParser 很有趣,因为这不是我在sails 文档或该教程中看到的任何内容。我试试看,谢谢。

标签: javascript node.js ember.js sails.js passport.js


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    例如,

    代替:

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

    写:

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

    【讨论】:

      【解决方案3】:

      我刚刚将会话添加回现有的 Sails 应用程序。在我的情况下,问题是会话通过.sailsrc 文件被禁用(这当然花了我一些时间来发现)。如果出现此问题:只需从该文件中删除 "session": false 行并添加 session-property。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-04
        相关资源
        最近更新 更多