passport.js没有将用户传递给会话

时间:2016-12-04 02:30:21

标签: javascript node.js passport.js

我正在尝试使用passport.js,node和sequelize创建一个应用程序。 但是,护照并没有像预期的那样在会话中返回用户。

当我记录req.session时,我得到了这个:

a=0.400256;
b=0.916403;
f = @(x) [-x(1) + a*x(1) - b*x(2) + b*x(1)^2];
f2 = @(x) [-x(2) + b*x(1) + a*x(2) - a*x(1)^2];
ezplot('f',[-10 10 -10 10]); hold on;
ezplot('f2',[-10 10 -10 10]);
grid

当我记录req.session.passport时,我得到了未定义。

我该如何解决这个问题?

这是我的server.js:

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

这是我的passport.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
}));

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

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

        }
    ));

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题并解决了它。

只需删除

secure: true 

这样的会议

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

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