2017-04-21 46 views
0

我有一個項目使用passportjs完全正常工作,但沒有顯示Flash消息。passportjs本地connectflash不與ejs合作

的passportjs文件看起來是這樣的:

passport.use('local-login', new LocalStrategy({ 
    // by default, local strategy uses username and password, we will override with email 
    usernameField: 'email', 
    passwordField: 'password', 
    passReqToCallback: true // allows us to pass in the req from our route (lets us check if a user is logged in or not) 
    }, 
    function (req, email, password, done) { 
    if (email) { 
     email = email.toLowerCase() 
    } // Use lower-case e-mails to avoid case-sensitive e-mail matching 

    // asynchronous 
    process.nextTick(function() { 
     User.findOne({ 'local.email': email }, function (err, user) { 
     // if there are any errors, return the error 
     if (err) { 
      console.log(err) 
      return done(err) 
     } 

     // if no user is found, return the message 
     if (!user) { 
      console.log('No user found') 
      return done(null, false, req.flash('message', 'No user found')) 
     } 

我routes.js文件看起來像這樣:

// Login 
    app.get('/login', function (req, res) { 
    console.log('login get') 
    res.render('pages/login', {message: req.flash('messsage')}) 
    }) 

我login.ejs文件看起來像這樣:

<%if (message) {%> 
    <%=message%> 

    <%}%> 

我不知道爲什麼它不起作用?

這裏說到我server.js如果是涉及到任何的問題包括:

var express = require('express') 
var mongoose = require('mongoose') 
var passport = require('passport') 
var path = require('path') 
var ejs = require('ejs') // Not used? 
var fs = require('fs') // Not used? 

const session = require('express-session') 
const MongoStore = require('connect-mongo')(session) 

// Reads .env variables for encrypted data 
require('dotenv').config() 

var port = process.env.PORT || 8080 
var db = process.env.MONGO_URI 

mongoose.connect(db) // connect to our database 

var app = express() 

app.set('views', './views') 
app.set('view engine', 'ejs') 

// GET /public/style.css etc. 
app.use(express.static(path.join(__dirname, '/public'))) 

var bodyParser = require('body-parser') 
app.use(bodyParser.urlencoded()) 

app.use(session({ 
    secret: 'hakunamatata', 
    store: new MongoStore({ 
    mongooseConnection: mongoose.connection, 
    saveUninitialized: false, 
    resave: false 
    }) 
})) 

var flash = require('connect-flash') 
app.use(flash()) 

var initPassport = require('./app/authentication/passport') 
initPassport(passport) 

app.use(passport.initialize()) 
app.use(passport.session()) // persistent login sessions 

require('./app/routes/routes')(app, passport) 

app.listen(port) 
console.log('Dev port is: ' + port) 

回答

0

我測試:

req.flash('loginMessage', 'No user found') 

代替:

req.flash('message', 'No user found') 

,並在routes.js文件:

而不是3210

{message: req.flash('message')} 

而現在它的作品......我不知道是什麼讓區別,但我希望這可以幫助別人,將來別人..