2016-12-04 4 views
1

Ich versuche, eine App mit pass.js, Knoten und Sequelize zu erstellen. Der Pass gibt den Benutzer in der Sitzung jedoch nicht erwartungsgemäß zurück.pass pass.js nicht Benutzer an Sitzung

Wenn ich req.session log ich diese:

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

wenn ich req.session.passport log ich nicht definiert bekommen.

Wie kann ich das beheben?

Das ist mein 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 
})); 

Und das ist mein 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); 
      }); 

     } 
    )); 

Und das sind die Routen Ich verwende:

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

Ich hatte das gleiche Problem hier sehen können, einfach weil ich 'pass.authorize()' anstelle von 'pass.authenticate() 'verwendet habe. –

Antwort

2

Ich hatte das gleiche Problem und habe es gelöst.

Entfernen Sie einfach

secure: true 

für Sitzung, wie die

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

sollten Sie arbeitet man auch einfaches Beispiel für Pass-local hier https://github.com/passport/express-4.x-local-example

Verwandte Themen