mongoose passport.authenticate不验证用户

gk7wooem  于 2023-08-06  发布在  Go
关注(0)|答案(1)|浏览(107)

我尝试使用passport-local和passport-local-mongoose注册和验证用户,但该用户未获得验证。我不想降级我的 Mongoose 版本。
这是用于注册和验证用户以重定向到“/secrets”路由的代码。用户在MongoDB数据库中注册成功,但未进行身份验证。

app.post('/register',function(req,res,next){

    User.register({username:req.body.username},req.body.password)
    .then((user) =>{

        passport.authenticate("local",function(err,user,info){
            if(!err)
            {
                res.redirect("/secrets");
            }
            else{
                console.log(err);
            }
        })(req,res,next);
        
    })
    .catch(err =>{
        console.log(err);
        res.redirect("/register");
    });

});

字符串
下面的代码正在执行,没有任何错误,但是用户没有得到身份验证,并且被重定向到'/login'路由,而不是显示'secrets'页面。

passport.authenticate("local",function(err,user,info){
            if(!err)
            {
                res.redirect("/secrets");
            }
            else{
                console.log(err);
            }
        })(req,res,next);


这是'/secrets'路由:

app.get('/secrets',function(req,res){

    if(req.isAuthenticated())
    {
        res.render("secrets");
    }
    else
    {
        res.redirect("/login");
    }

});


下面是整个代码:

require("dotenv").config();
const express = require('express');
const bodyParser = require('body-parser');
const ejs = require("ejs");
const mongoose = require("mongoose");
const session = require("express-session");
const passport = require("passport");
const passportLocalMongoose = require("passport-local-mongoose");

const app = express();

app.use(express.static("public"));
app.use(bodyParser.urlencoded({extended:true}));
app.set("view engine",'ejs');

app.use(session({
    secret: 'Our Little Secret',
    resave: false,
    saveUninitialized: false
}));

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

mongoose.connect("mongodb://127.0.0.1:27017/userDB");

const userSchema = new mongoose.Schema({
    email:String,
    password: String
});

userSchema.plugin(passportLocalMongoose);

const User = new mongoose.model("User",userSchema);

passport.use(User.createStrategy());

passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

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

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

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

app.get('/secrets',function(req,res){

    if(req.isAuthenticated())
    {
        res.render("secrets");
    }
    else
    {
        res.redirect("/login");
    }

});

app.post('/register',function(req,res,next){

    User.register({username:req.body.username},req.body.password)
    .then((user) =>{

        passport.authenticate("local",function(err,user,info){
            if(!err)
            {
                res.redirect("/secrets");
            }
            else{
                console.log(err);
            }
        })(req,res,next);
        
    })
    .catch(err =>{
        console.log(err);
        res.redirect("/register");
    });

});

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

   
});
 
app.listen(3000,function(){
    console.log('server running on port 3000... ');
});


请帮助,我是Node.js和Mongoose的新手。

yfwxisqw

yfwxisqw1#

不使用passport.use(User.createStrategy());‍‍‍,而是首先需要passport-local来创建策略(const LocalStrategy = require('passport-local').Strategy),然后将passport.use(User.createStrategy());替换为passport.use(new LocalStrategy(User.authenticate()));‍‍‍‍‍‍‍‍‍‍‍‍‍

相关问题