简体   繁体   English

password.js没有将用户传递到会话

[英]passport.js not passing user to session

I'm trying to create an app with passport.js, node and sequelize. 我正在尝试使用passport.js,node和sequelize创建一个应用程序。 But, passport is not returning the user in the session as expected. 但是,护照未按预期返回会话中的用户。

When I log req.session I get this: 当我登录req.session时,我得到了:

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

when I log req.session.passport I get undefined. 当我登录req.session.passport时,我不确定。

How can I fix this? 我怎样才能解决这个问题?

This is my server.js: 这是我的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
}));

And this is my passport.js: 这是我的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);
            });

        }
    ));

And these are the routes I'm using: 这些是我正在使用的路线:

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

I had the same problem and solved it. 我有同样的问题并解决了。

Just remove 只需删除

secure: true 

for session like that 像这样的会议

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

It should works Also you can see simple example of passport-local here https://github.com/passport/express-4.x-local-example 它应该可以工作。您还可以在此处查看简单的本地护照示例https://github.com/passport/express-4.x-local-example

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM