Вот мой код. Я сделал две стратегии, пользовательскую и админскую. При регистрации с использованием пользователя он работает нормально, я также могу войти в систему. Но при регистрации в качестве администратора после нажатия кнопки «Регистрация» отображается неверный запрос. Но он сохраняет и регистрирует всю информацию в базе данных. Думаю, проблема связана с аутентификацией. Но опять же, код аутентификации для пользователя и администратора идентичен. Но почему только пользователь может войти в систему, а администратор не может ?? Я искал решение больше дней, помогите пожалуйста.
// importing modules
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();
// using modules
app.use(express.static("public"));
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({
extended: true
}))
app.use(session({
secret: "DONHUB",
resave: false,
saveUninitialized: false
}))
app.use(passport.initialize());
app.use(passport.session());
// connecting to database (used placeholders here)
mongoose.connect("mongodb+srv://username:userxxxxx@cluster0.bdgfz.mongodb.net/dbname", {useNewUrlParser: true, useUnifiedTopology: true });
mongoose.set("useCreateIndex", true)
// creating db schema
const userSchema = new mongoose.Schema ({
email: String,
password: String,
phone: String,
address: String,
city: String,
username: String,
});
const adminSchema = new mongoose.Schema({
email: String,
password: String,
phone: String,
address: String,
username: String,
city: String,
})
// use passport as plugin for schema
userSchema.plugin(passportLocalMongoose);
adminSchema.plugin(passportLocalMongoose);
// creating collection os users
const User = new mongoose.model("User", userSchema);
const Admin = new mongoose.model("Admin", adminSchema);
// using passport for authentication
passport.use('localuser', User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
passport.use('localadmin', Admin.createStrategy());
passport.serializeUser(Admin.serializeUser());
passport.deserializeUser(Admin.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("/adminRegister", function(req, res) {
res.render("adminRegister");
})
app.get("/admin", function(req, res) {
if (req.isAuthenticated()) {
res.render("admin") } else {res.redirect("/login")}
})
app.get("/user", function(req, res) {
if (req.isAuthenticated()) {
res.render("user") } else {res.redirect("/login")}
})
// app.posts
app.post("/register", function(req, res) {
User.register({
email: req.body.email,
phone: req.body.phone,
address: req.body.address,
username: req.body.username,
city: req.body.city
},
req.body.password, function(err, user) {
if (err) {
console.log(err);
res.redirect("/register");
} else {
passport.authenticate("localuser") (req, res, function () {
res.redirect("/donate");
})
}
})
})
app.post("/adminRegister", function(req, res) {
Admin.register({
username: req.body.city + "Admin",
email: req.body.email,
phone: req.body.phone,
address: req.body.address,
city: req.body.city,
},
req.body.password, function(err, admin) {
if (err) {
console.log(err)
res.redirect("/adminRegister");
} else {
passport.authenticate("localadmin") (req, res, function () {
res.redirect("/admin")
})
}
}
)
})
app.post("/login", function (req, res) {
if (req.body.username.search("Admin") !== -1) {
console.log("this is admin")
const admin = new Admin({
username: req.body.username,
password: req.body.password,
email: req.body.email,
phone: req.body.phone,
address: req.body.address,
city: req.body.city,
})
req.login(admin, function(err) {
if (err) {
console.log(err)
} else {
passport.authenticate("local", {successRedirect: '/admin', failureRedirect: '/login'}) (req ,res, function() {
res.redirect("/admin");
})
}
})
} else {
console.log("this is user")
const user = new User({
email: req.body.email,
password: req.body.password,
phone: req.body.phone,
address: req.body.address,
username: req.body.username,
})
req.login(user, function(err) {
if(err) {
console.log(err);
} else {
passport.authenticate("localuser", {successRedirect: '/donate', failureRedirect: '/login'}) (req,res, function() {
res.redirect("/donate");
})
}
})
}
})
// opening port to listen
let port = process.env.PORT;
if (port == null || port == "") {
port = 3000
}
app.listen(port, function() {
console.log("Server started successfully...")
})