【问题标题】:Showing passport.js messages with flash用 flash 显示 passport.js 消息
【发布时间】: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


    【解决方案1】:

    文档声明它需要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

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多