【发布时间】:2020-08-14 16:21:25
【问题描述】:
我试图显示来自 passport.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', (req, res) => {
res.render('register')
})
app.post('/register', async (req, res) => {
const { name, email, password } = req.body
accounts.push({ id: Date.now().toString(), name, email, 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, false, { 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>
谁能看到这个问题?我正在关注一个教程,这似乎与他的代码完全匹配
【问题讨论】:
标签: javascript node.js reactjs express passport.js