Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Passport会话不存在_Angularjs_Node.js_Session_Passport.js_Express Session - Fatal编程技术网

Angularjs Passport会话不存在

Angularjs Passport会话不存在,angularjs,node.js,session,passport.js,express-session,Angularjs,Node.js,Session,Passport.js,Express Session,嗨,我正在尝试用passport本地策略实现登录。出于某种奇怪的原因,当我从邮递员那里发送请求时,我的代码可以工作,但是当我从我的角度项目中调用相同的操作时,它就不工作了。追踪我发现的问题: 当我从邮递员发送请求时,会话如下所示: Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true

嗨,我正在尝试用passport本地策略实现登录。出于某种奇怪的原因,当我从邮递员那里发送请求时,我的代码可以工作,但是当我从我的角度项目中调用相同的操作时,它就不工作了。追踪我发现的问题:

当我从邮递员发送请求时,会话如下所示:

Session {
    cookie: { 
           path: '/',
           _expires: null,
            originalMaxAge: null,
            httpOnly: true 
    },
    passport: { 
             user: 58f0865eb9b69e1d38fa135b 
    } 
}
当我从服务器发送请求时,会话如下所示:

Session {
    cookie: { 
           path: '/',
           _expires: null,
            originalMaxAge: null,
            httpOnly: true 
    }
}
因为使用passport策略无法反序列化用户。我不知道为什么会发生这种情况,任何帮助都将不胜感激

服务器代码:

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator({
    customValidators: {
        isArray: function (value) {
            return Array.isArray(value);
        }
    },
    errorFormatter: function (param, msg, value) {
        var namespace = param.split('.')
            , root = namespace.shift()
            , formParam = root;

        while (namespace.length) {
            formParam += '[' + namespace.shift() + ']';
        }
        return {
            param: formParam,
            msg: msg,
            value: value
        };
    }
}));

app.use(cookieParser());
app.use(expressSession({ secret: 'untoldstoryofninja', resave: false, saveUninitialized: true }));
app.use(cors());
app.use(passport.initialize());
app.use(passport.session());

// routes ========================================================================================
app.use(require('./config/routes/routes.js')(passport));
app.all('*', (req, res) => res.status(404).send({ msg: 'No API Route.' }));  
护照策略:

module.exports = function (passport) {
    passport.use(new LocalStrategy({ usernameField: "username", passwordField: "password" },
        function (username, password, done) {
            User.findOne({ username: username }, function (err, user) {
                if (err) { return done(err); }
                if (!user) { return done(null, false); }
                if (user.comparePassword(password, function (err, isMatch) {
                    if (isMatch && !err) {
                        done(null, user)
                    } else {
                        done(null, false);
                    }
                }));
            });
        }
    ));

    passport.serializeUser(function (user, done) {
        done(null, user._id);
    });

    passport.deserializeUser(function (id, done) {
        User.findById({ _id: id }, function (err, user) {
            done(err, user);
        });
    });
};
你需要做什么

passReqToCallback:true

还要确保您的字段名与

sernameField:“电子邮件”

密码字段:“passwd”

你需要做什么

passReqToCallback:true

还要确保您的字段名与

sernameField:“电子邮件”

密码字段:“passwd”


还是一样的问题还是一样的问题
passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'passwd',
    passReqToCallback: true,
    session: false
  },
  function(req, username, password, done) {
    // request object is now first argument
    // ...
  }
));