Я написал код в node.js для страниц входа и регистрации, используя mon goose. Метод аутентификации - паспорт. Но я получаю ошибку 400, неверный запрос для страницы регистрации и не могу сериализовать пользователя в ошибку сеанса для страницы входа.
Вот мой код относительно того же.
const express=require('express');
const bodyparser=require('body-parser');
const mongoose=require('mongoose');
const https=require('https');
const session=require('express-session');
const passport=require('passport');
const passportLocalMongoose=require('passport-local-mongoose');
const app=express();
app.use(express.static('public'));
app.set('view engine','ejs');
app.use(bodyparser.json());
app.use(bodyparser.urlencoded({ extended: true }));
app.use(session({
secret: 'My little secret of football tactics.',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
mongoose.connect("mongodb://localhost:27017/bankDB" , {useUnifiedTopology:true, useNewUrlParser: true
});
mongoose.set('useCreateIndex', true);
const bankschema=new mongoose.Schema({
username:{type:String},
email:{type:String,unique:true},
password1:String,
balance:{type:Number,default:0},
versionKey: false
});
bankschema.plugin(passportLocalMongoose);
bankschema.path('email').validate(async function(email){
const count= await mongoose.models.User.countDocuments({email})
return !count
},'Email-id already exists')
var User=mongoose.model("User",bankschema);
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.get("/singup.html", function(req, res){
res.render("singup");
});
app.get("/login.html", function(req, res){
res.render("login");
});
app.get("/", function(req, res){
res.render("front");
});
app.get("/next.html", function(req, res){
if(req.isAuthenticated()){
res.render("next");
}
else{
res.redirect("/login.html");
}
});
app.post("/singup.html", function(req, res){
User.register({email:req.body.email,username:req.body.username}, req.body.password1,
function(err,user){
if(err){
console.log(err);
res.render('singup');
}else{
passport.authenticate("local")(req, res, function(){
console.log("success");
res.render("next");
});
}
});
});
app.post('/login.html', function(req, res){
const user=new User({
email:req.body.email,
password1:req.body.password1
});
req.login(user, function(err){
if(err){
console.log(err);
}
else{
passport.authenticate("local")(req, res, function(){
console.log("success");
res.render("next");
});
}
});
});
Здесь, в signup, функция паспорта .authenticate не выполняется, и я не понимаю, почему. Он говорит о плохом запросе каждый раз, когда я пытаюсь зарегистрироваться, но введенные данные сохраняются в mongodb.