【问题标题】:req.flash is not a function express passportreq.flash 不是功能快递护照
【发布时间】:2020-11-08 01:17:40
【问题描述】:

我正在尝试使用护照对用户进行身份验证。我正在尝试使用 flash 显示消息。在 passport-config.js 中,我编写了本地策略。当我运行代码时,它给出了错误“req.flash不是passport-config.js文件中的函数。这是我第一次使用passport和flash。请帮助我。提前致谢。 app.js

const express = require("express");
const bodyParser = require("body-parser");
const ejs = require("ejs");
const passport = require("passport");
const initializePassport=require('./passport-config')(passport);
const auth=require('./authenticate');
const bcrypt=require('bcrypt');
const session = require('express-session');
const flash = require('express-flash');
const Post=require("./Post");
const User=require('./User');
const app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));
app.use(session({
  secret:"secret",
  resave:false, //this means session variables are not resaved if nothing is changed
  saveUninitialized:false //this means we dont want to save empty value in session if there is no value
}))
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(function(req, res, next) {
  // make all error and success flash messages available from all templates
  res.locals.error = req.flash("error")
  res.locals.success = req.flash("success")
  next()
})

app.get("/login",function(req,res){
  res.render('login');
})

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

passport-config.js

const LocalStrategy = require('passport-local').Strategy;
const mongoose=require('mongoose');
const bcrypt = require('bcrypt');
const User=require('./User');
function initialize(passport) {
  const authenticateUser =(req,email, password, done) => {
    User.findOne({email:email}).then(user=>{
      if(!user){
      //   req.flash('error','This email is not registered');
        return done(null,false,req.flash('error','This email is not registered'));
      }
      //Match password
      bcrypt.compare(password,user.password,(err,isMatch)=>{
        if(err){
           //  req.flash('error','Something went wrong!Please try again.');
          throw err;
        }
        if(isMatch){
          return done(null,user); 
        }
        else{
           req.flash('error','Password Incorrect');
          return done(null,false, req.flash('error','Password Incorrect'));
        }
      });
    }).catch(err=> console.log(err));
  }

  passport.use(new LocalStrategy({ usernameField: 'email' ,passReqToCallBack: true}, authenticateUser));
  passport.serializeUser((user, done) => done(null, user.id));
  passport.deserializeUser((id, done) => {
    User.findById(id,(err,user)=>{
    done(err,user);
    })
  })
}

module.exports = initialize;

【问题讨论】:

    标签: javascript node.js express session passport.js


    【解决方案1】:

    试着把护照放在闪光灯之前

    app.use(passport.initialize());
    app.use(passport.session());
    app.use(flash());
    

    【讨论】:

    • 感谢您的回复。我试着这样做。我遇到了同样的错误。
    【解决方案2】:

    passport.use(new LocalStrategy({ usernameField: 'email' , passReqToCallback : true}, authenticateUser)); 我只需要添加 passReqToCallback : true。它现在可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2015-04-11
      • 2016-11-20
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多