Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript passport身份验证错误:策略#身份验证必须由子类覆盖_Javascript_Node.js_Mongodb_Express_Passport.js - Fatal编程技术网

Javascript passport身份验证错误:策略#身份验证必须由子类覆盖

Javascript passport身份验证错误:策略#身份验证必须由子类覆盖,javascript,node.js,mongodb,express,passport.js,Javascript,Node.js,Mongodb,Express,Passport.js,我正在尝试验证和登录一个用户,但它显示错误:策略#必须由子类覆盖验证,如何修复此错误 原因可能是什么 Passport.js const LocalStrategy = require('passport').Strategy const mongoose = require('mongoose') const bcrypt = require('bcrypt') const User = require('../models/User') module.exports = functi

我正在尝试验证和登录一个用户,但它显示错误:策略#必须由子类覆盖验证,如何修复此错误

原因可能是什么

Passport.js

const LocalStrategy = require('passport').Strategy

const mongoose = require('mongoose')

const bcrypt = require('bcrypt')

const User = require('../models/User')

module.exports = function(passport) {

    passport.use("local",

        new LocalStrategy({usernameField:"email"}, (email, password, done)=>{

            User.findOne({email:email})

                .then(user=>{

                    if(!user){

                        return done(null, false,{message:"That email is not registered"})
                    }

                    bcrypt.compare(password, user.password, (err, isMatch)=>{

                        if(err) throw err

                        if(isMatch){

                            return done(null, user)

                        }else {

                            return done (null, false,{message:"password incorrect"})

                        }
                    })
                })

                .catch(err=>console.log(err))

        })
    )

    passport.serializeUser(function (user, done) {

        done(null, user.id)

    })

    passport.deserializeUser(function (id, done) {

        User.findById(id, function (err, user) {

            done(err, user)
        })
    })
}
Login.js

const express = require('express');

const passport = require("passport");

const router = express.Router();

/* GET users listing. */

router.get('/login', function (req, res, next) {

    res.render('login')

})



router.post('/login', function(req, res, next) {

    passport.authenticate('local', function(err, user, info) {

        if (err) { return next(err); }

        if (!user) { return res.redirect('/login'); }

        req.logIn(user, function(err) {

            if (err) { return next(err); }

            return res.redirect('/');

        });

    })
(req, res, next);

});



module.exports = router
app.js

const express = require('express')

const app = express()

const mongoose = require('mongoose')

const bodyParser = require('body-parser')

const logIn = require('./routes/login')

const flash = require('connect-flash')

const session = require('express-session')

const passport = require("passport");

require('./config/passport')(passport)

app.use(bodyParser.urlencoded({extended : false}))

//express session

app.use(session({

    secret:'secret',

    resave: false,

    saveUninitialized: true,

}))

app.use(passport.initialize())

app.use(passport.session())

//flash connect

app.use(flash())

app.use((req, res, next)=>{

    res.locals.success_msg = req.flash('success_msg')

    res.locals.failure_msg = req.flash('error_msg')

    next()
})

app.use(logIn)

当passport无法实例化strategy的实例时会发生此错误,我看不出您的代码中有任何错误,因此,我建议您卸载passport并重新安装它

您相信我花了一周时间解决了这个问题并最终解决了吗感谢用户在未创建会话时成功登录如何解决此问题如果没有会话,用户无法成功登录,passport要求会话能够序列化和反序列化用户。输入有效用户数据时,passport不会显示任何错误。对于logini,请使用console.log在serialize中序列化,在登录时显示user.id,但在浏览器中,当我进入应用程序时,会话存储为空。它不显示任何键和值