passportjs本地connectflash不与ejs一起工作

时间:2017-04-21 08:31:05

标签: node.js ejs connect-flash

我有一个项目使用passportjs完全正常工作,但没有显示flash消息。

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)

1 个答案:

答案 0 :(得分:0)

我测试过:

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

而不是:

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

并在routes.js文件中:

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

而不是:

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

现在它有效......我不知道是什么造成了不同,但我希望这可以帮助其他人...