显示带有Flash的passport.js消息

问题描述

我正在尝试显示来自password.js的Flash消息,但由于某些原因它们没有显示-但是它显示“找不到凭据”(但这不是我想要的错误消息) 下面的代码-App,config和ejs(分别)

const express = require('express')
const app = express()
const bcrypt = require('bcrypt')
app.set('view engine','ejs')
const initializePassport = require('./passport-config')
const passport = require('passport')
const flash = require('express-flash')
const session = require('express-session')

const accounts = [

]
app.use(passport.initialize())

initializePassport(passport,accounts.find(user => user.email === email))

app.use(express.urlencoded({ extended: true }))
app.use(passport.session())



app.use(session({
  secret: 'secret',resave: false,saveUninitialized: false
}))

app.use(flash())

app.get('/login',(req,res) => {
  res.render('login')
})

app.post('/login',passport.authenticate(('local'),{
  successRedirect: '/',failureRedirect: '/login',failureFlash: true
}))

app.get('/register',res) => {
  res.render('register')
})

app.post('/register',async (req,res) => {
  const { name,email,password } = req.body
  accounts.push({ id: Date.Now().toString(),name,password: await bcrypt.hash(password,10) })
  console.log(accounts);
  res.render('login')
})



app.listen(3000,() => {
  console.log('server is running ');
})

//////////
const LocalStrategy = require('passport-local').Strategy
const bcrypt = require('bcrypt')

const initializePassport = (passport,getUserByEmail) => {
  const authenticateUser = async (email,password,done) => {
    const user = getUserByEmail(email)
    if (user == null) {
      return done(null,false,{ message: "email is not on our db" })
    }
    try {
      if (await bcrypt.compare(password),user.password) {
        return done(null,user)
      } else {
        return done(null,{ message: 'wrong password ' })
      }

    } catch (error) {
      return done(error)
    }
  }
  passport.use(new LocalStrategy(({ usenameField: 'email' }),authenticateUser))
}

module.exports = initializePassport
//////////
<h1>Login</h1>

<% if(messages.error){ %>
<p><%=messages.error%></p>
<% } %>

<form action="/login" method="POST">
  <label for="email">email</label>
  <input id="email" name="email" type="text">
  <label for="password">password</label>
  <input id="password" name="password" type="text">
  <button>Log in</button>
</form>
<p> <a href="/register">register</a></p>

谁能看到这个问题?我正在学习一个教程,这似乎与他的代码完全匹配

解决方法

文档指出,它需要cookieParser才能正常工作。我会在您的文件中添加以下内容:

const cookieParser = require('cookie-parser');

app.use(cookieParser());

文档:https://github.com/RGBboy/express-flash#usage

您也可能会查看名为connect-flash的扩展的源项目。有关实施此程序包的大量信息,应该可以很好地转移到express-flash扩展名上。

工作示例:https://gist.github.com/vesse/9e23ff1810089bed4426