passport.js不会将用户传递给会话

我正在尝试创build一个应用程序与passport.js,节点和续集。 但是,护照没有像预期的那样在会话中返回用户。

当我loggingreq.session时,我得到这个:

Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true, secure: true } } 

当我loggingreq.session.passport我得到未定义。

我怎样才能解决这个问题?

这是我的server.js:

 const express = require('express'); const load = require('express-load'); const passport = require('passport'); const cookieParser = require('cookie-parser'); const bodyParser = require('body-parser'); const session = require('express-session'); // var app = express(); var app = module.exports = express(); // read cookies (needed for auth) app.use(cookieParser()); // get information from html forms app.use(bodyParser()); //set session app.set('trust proxy', 1) // trust first proxy app.use(session({ secret: 'asdasdsada', resave: false, saveUninitialized: true, cookie: { secure: true } })) // required for passport app.use(passport.initialize()); app.use(passport.session({ secret: 'adsdssa', name: 'sadasd', proxy: true, resave: true, saveUninitialized: true })); 

这是我的passport.js:

 var LocalStrategy = require('passport-local').Strategy; var SlackStrategy = require('passport-slack').Strategy; var User = require('../models/index').User; var mysql = require('mysql'); var connection = mysql.createConnection({ host : process.env.MYSQL_HOST, user : process.env.MYSQL_USER, password : process.env.MYSQL_PASSWORD, database : process.env.MYSQL_DB }); module.exports = function(passport) { passport.serializeUser(function(user, done) { console.log('-----------serialize'); done(null, user.id); }); passport.deserializeUser(function(id, done) { console.log('----------deserialize'); Model.User.findOne({ where: { 'id': id } }).then(function (user) { if (user == null) { done(new Error('Wrong user id.')); } done(null, user); }) }); passport.use('slack', new SlackStrategy({ clientID: process.env.SLACK_ID, clientSecret: process.env.SLACK_SECRET, callbackURL: process.env.SLACK_REDIRECT, scope: "incoming-webhook users:read" }, function(accessToken, refreshToken, profile, done) { var values = { where: { slack_id: profile.id }, defaults: {slack_id: profile.id, name: profile.displayName} }; User.findOrCreate(values) .spread(function(user, created) { return done(null,user); }); } )); 

这些是我正在使用的路线:

 app.get('/auth/slack', passport.authorize('slack')); app.get('/auth/slack/callback', passport.authorize('slack', { failureRedirect: '/login' }), function(req, res) { //Successful authentication, redirect home. console.log(req.session); console.log(req.session.passport); res.redirect('/dashboard'); } ); 

我有同样的问题,解决了它。

只要删除

 secure: true 

这样的会议

 //set session app.use(session({ secret: 'asdasdsada', resave: false, saveUninitialized: true })) 

它应该也可以看到简单的例子护照本地https://github.com/passport/express-4.x-local-example