2016-12-04 1 views
1

passport.js, node 및 sequelize로 앱을 만들려고합니다. 그러나 여권은 세션에서 사용자를 예상대로 반환하지 않습니다. 내가 req.session를 기록 할 때passport.js가 사용자를 세션에 전달하지 않음

난이 얻을 : 나는 req.session.passport를 로그인 할 때

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

내가 정의되지 않은 얻을.

어떻게 해결할 수 있습니까?

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

여기의 간단한 예를 볼 수 있습니다 또한 작동 단순히'passport.authenticate()'대신'passport.authorize()'를 사용했기 때문입니다. –

답변

2

나는 똑같은 문제를 안고 그것을 풀었다.

그냥해야

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

같은 세션에

secure: true 

을 제거, 당신은 여권 로컬 내가 여기에 같은 문제가 있었다 https://github.com/passport/express-4.x-local-example

관련 문제