2017-10-19 24 views
1

J'essaie de générer des messages flash via connect-flash lorsque les utilisateurs se connectent avec succès à mon application.Impossible d'obtenir le message flash à afficher lors de l'utilisation de connect-flash pour l'application Node/Express

Je peux console déconnecter les messages flash, mais ils ne semblent pas être rendu côté client.

Cependant, je sais pertinemment qu'il n'y a rien de mal dans le côté client parce que quand je remplacerai req.flash[0] dans mon itinéraire avec une simple chaîne comme 'You have successfully login!' le message ne apparaît.

config Passeport:

// Local login Strategy 
passport.use('local-login', new LocalStrategy(
    { 
    usernameField: 'email', 
    passwordField: 'password', 
    passReqToCallback: true 
    }, 
    (req, email, password, done) => { 
    User.findOne({ 'local.email': email }) 
     .then(user => { 
     if (!user) return done(null, false); 

     user.validPassword(password, (err, res) => { 
      if (err) return done(err); 
      if (!res) return done(null, false); 
      done(null, user, req.flash('success', 'Login Successful!')); 
     }); 
     }) 
     .catch(err => done(err)); 
    } 
)); 

Route:

app.post(
    '/api/login', 
    passport.authenticate('local-login'), 
    (req, res) => { 
     console.log(req.flash('success')); 
     const user = { 
     user: req.user, 
     msg: req.flash('success')[0]  // Works when I replace with 'You have successfully logged in' 
     }; 
     res.send(user); 
    } 
); 

Serveur:

const express = require('express'); 
const bodyParser = require('body-parser'); 
const mongoose = require('mongoose'); 
const passport = require('passport'); 
const flash = require('connect-flash'); 
const cookieParser = require('cookie-parser'); 
const cookieSession = require('cookie-session'); 
const keys = require('./config/keys'); 
require('./models/User'); 
require('./services/passport'); 

mongoose.connect(keys.mongoURI); 

const app = express(); 

app.use(bodyParser.json()); 
app.use(cookieParser()); 
app.use(flash()); 


app.use(
    cookieSession({ 
    maxAge: 30 * 24 * 60 * 60 * 1000, 
    keys: [keys.cookieKey] 
    }) 
); 

app.use(passport.initialize()); 
app.use(passport.session()); 

require('./routes/authRoutes')(app); 

app.get('/', (req, res) => { 
    res.json({ message: 'hello' }); 
}); 

if (process.env.NODE_ENV === 'production') { 
    app.use(express.static('client/build')); 

    const path = require('path'); 
    app.get('/', (req, res) => { 
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html')); 
    }); 
} 

const PORT = process.env.PORT || 5000; 
app.listen(PORT,() => console.log('Working')); 

Répondre

1

problème bizarre, mais son tour S out en appelant console.log(req.flash('success') avant de l'incorporer dans la réponse effectivement fait échouer. Une fois que j'ai supprimé la ligne de journal de la console, il a commencé à fonctionner.

Je ne sais pas pourquoi c'est - je ne sais pas pourquoi c'est le cas, si quelqu'un a une idée aimerait savoir.