0

I have a project using passportjs fully working, but not showing flash messages.

The passportjs file looks like this:

  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'))
        }

My routes.js file looks like this:

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

my login.ejs file looks like this:

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

  <%}%>

I have no idea why it isn't working?

Here comes my server.js if it is any problem related to includes:

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)
Simon Guldstrand
  • 488
  • 1
  • 5
  • 24

1 Answers1

0

I tested with:

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

instead of:

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

and on the routes.js file:

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

instead of:

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

And now it works... I dont know what made the difference, but I hope this can help someone else in the future..

Simon Guldstrand
  • 488
  • 1
  • 5
  • 24