Ошибки сеанса входа в паспорт - PullRequest
0 голосов
/ 12 июля 2020

Я написал код в 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.

1 Ответ

0 голосов
/ 12 июля 2020

В функции password.authenticate внутри вашего app.post("/singup.html") у вас есть перенаправление на res.redirect("/next.html") вместо res.render("next"). Это связано с тем, что после аутентификации вашего пользователя app.get("/next.html") должен проверить, аутентифицирован ли он, и по этой причине вам нужно направить на "/next.html", а не отображать его, поскольку это противоречит значению проверки проверки внутри маршрута. Попробуйте и вернитесь, если возникнут проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...