问题描述
我正在尝试显示来自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
扩展名上。