1

私はisomorphic-reduxとReact.jsを使ってWebアプリケーションを構築しています。私は現在、Node.jsのパスポートを使って基本認証を取得しようとしています。しかし、ログインしようとすると、Cookieセッションがブラウザに読み込まれないような問題が発生しました。セッションを保存していないExpressセッション

これまでに書いたコードのカットダウン版です。私はログ

Server.js

import Express from 'express'; 
import passport from 'passport'; 
import bodyParser from 'body-parser'; 
import cookieParser from 'cookie-parser'; 
import expressSession from 'express-session'; 

import serverConfig from './config'; 

const app = new Express(); 

// Apply body Parser and server public assets and routes 
app.use(cookieParser()); 
app.use(bodyParser.json({ limit: '20mb' })); 
app.use(bodyParser.urlencoded({ limit: '20mb', extended: true })); 
app.use(expressSession({ 
    secret: serverConfig.sessionSecret, 
    resave: false, 
    saveUninitialized: false 
})); 

import pp from './passport'; 
pp(); 
app.use(passport.initialize()); 
app.use(passport.session()); 

passport.js

import passport from 'passport'; 
import mongoose from 'mongoose'; 
import path from 'path'; 

import User from './models/user.model'; 

import local from './strategies/local'; 

const pp = () => { 
    // Serialize sessions 
    passport.serializeUser(function(user, done) { 
     done(null, user.id); 
    }); 

    // Deserialize sessions 
    passport.deserializeUser(function(id, done) { 
     User.findOne({ 
      _id: id 
     }, '-salt -password', function(err, user) { 
      done(err, user); 
     }); 
    }); 

    local(); 
} 

export default pp; 

./strategies/local.js

import passport from 'passport'; 
import passportLocal from 'passport-local'; 
import mongoose from 'mongoose'; 

const LocalStrategy = passportLocal.Strategy; 
const User = mongoose.model('User'); 

const local =() => { 
    passport.use(new LocalStrategy({ 
     usernameField: 'username', 
     passwordField: 'password' 
    }, 
    (username, password, done) => { 
     User.findOne({ username: username }, (err, user) => { 
     if (err) { 
      return done(err); 
     } 
     if (!user) { 
      return done(null, false, { 
      message: 'Unknown user or invalid password' 
      }); 
     } 
     if (!user.authenticate(password)){ 
      return done(null, false, { 
      message: 'Unknown user or invalid password' 
      }); 
     } 
     return done(null, user); 
     }); 
    } 
)); 
} 

export default local; 

セッションをシリアライズすることはできますが、私は推測しているので、セッションは格納されず、セッションをデシリアライズしません。

答えて

0

セッションを永続化するには、express-sessionモジュールに保存する場所を指定する必要があります。まず、あなたは店を構築する必要があります:

var MongoStore = require('connect-mongo')(expressSession); 
var oneHour = 3600; 
var sessionStore = new MongoStore({ 
    url: 'mongodb://localhost:27017/my-session-store', 
    touchAfter: oneHour 
}); 

これはconnect-mongoを使用してMongoDBのストアを作成します - 私は、これは、同様mongooseで行うことができると確信しているが、私は、私のようにそれを残しておきますどのように知りません

app.use(expressSession({ 
    secret: serverConfig.sessionSecret, 
    store: sessionStore, // <---- added store information! 
    resave: false, 
    saveUninitialized: false 
})); 

:-)読者への課題は、その後、あなたは、このストアを使用するように明示セッションモジュールを伝えることができます

関連する問題