Node.js 中间件不适用于第二个模型,即医生,但它适用于管理员。在这里,我创建了一个两用户模型,一个是管理员,一个是医生
我试图建立一个两个用户登录系统一个是管理员,第二个是医生。在这里,我创建了一个中间件,它可以很好地用于第一个中间件,即admin,但如果是doctor,它会一次又一次地将我重定向到登录页面,尽管我的密码和用户名是正确的。 请有人告诉我如何为两个模型身份验证创建中间件Node.js 中间件不适用于第二个模型,即医生,但它适用于管理员。在这里,我创建了一个两用户模型,一个是管理员,一个是医生,node.js,passport.js,ejs,express-session,Node.js,Passport.js,Ejs,Express Session,我试图建立一个两个用户登录系统一个是管理员,第二个是医生。在这里,我创建了一个中间件,它可以很好地用于第一个中间件,即admin,但如果是doctor,它会一次又一次地将我重定向到登录页面,尽管我的密码和用户名是正确的。 请有人告诉我如何为两个模型身份验证创建中间件 'use strict'; var express = require("express"), app = express(), bodyParser = require("body-
'use strict';
var express = require("express"),
app = express(),
bodyParser = require("body-parser"),
passport = require("passport"),
LocalStrategy = require("passport-local"),
mongoose = require('mongoose');
var Admin = require("./models/admin");
var Doctor = require("./models/doctor");
var http = require('http');
var port = process.env.PORT || 1337;
//Set up default mongoose connection
var mongoDB = 'mongodb://localhost:27017/seeddb';
mongoose.connect(mongoDB, { useNewUrlParser: true });
app.use(bodyParser.urlencoded({ extended: true }));
app.set("view engine", "ejs");
app.use(express.static(__dirname + "/public", { redirect: false }));
//PASSPORT CONFIGURTION
app.use(require("express-session")({
secret: "Rockey is the best",`enter code here`
resave: false,
saveUninitialized: false,
}));
app.enable('trust proxy');
app.use(passport.initialize());
app.use(passport.session());
app.use(require('flash')());
//=========================================================
//Admin Authentication
passport.use('adminLocal', new LocalStrategy(Admin.authenticate()));
passport.serializeUser(Admin.serializeUser());
passport.deserializeUser(Admin.deserializeUser());
//Doctor Authentication
passport.use('doctorLocal', new LocalStrategy(Doctor.authenticate()));
passport.serializeUser(Doctor.serializeUser());
passport.deserializeUser(Doctor.deserializeUser());
//=========================================================
app.use(function (req, res, next) { // to pass currentUser to each routes
res.locals.currentUser = req.user;
next();
});
//========================================================
//Landing route
//========================================================
app.get('/', function (req, res) {
res.render("clinic/landing");
});
//=========================================================
//Admin routes
//=========================================================
app.get('/admin-login', function (req, res) {
res.render("admin/login");
});
//Sign Up
app.post('/admin-signup', function (req, res) {
var newAdmin = new Admin({ username: req.body.username });
Admin.register(newAdmin, req.body.password, function (err, admin) {
if (err) {
console.log(err);
return res.redirect("/admin-login");
}
passport.authenticate("adminLocal")(req, res, function () { //local can be twitter fb for authentication
console.log("Successfully signup Login to continue");
res.redirect("/admin-login");
});
});
});
//Admin sign in
// process the login form
app.post('/admin-login', function (req, res, next) {
passport.authenticate('adminLocal', { failureFlash: true }, function (err, admin, info) {
if (err) { return next(err); }
if (!admin) { return res.redirect('/admin-login'); }
req.logIn(admin, function (err) {
if (err) { return next(err); }
return res.redirect('/admin/' + admin._id);
});
})(req, res, next);
});
//Admin home
app.get('/admin/:id', isLoggedIn, function (req, res) {
Admin.findById(req.params.id, function (err, admin) {
if (err) {
console.log(err);
} else {
Doctor.find({}).exec(function (err, doctors) {
if (err) throw err;
res.render("admin/adminhome", {"doctors" : doctors, admin: admin });
});
}
});
});
//===============================================
//Doctor routes
//===============================================
//Doctor login
app.get('/doctor-login', function (req, res) {
Admin.findById(req.params.id, function (err, admin) {
if (err) {
console.log(err);
} else {
res.render("doctors/login");
}
});
});
app.post('/doctor-signup', function (req, res) {
var newDoctor = new Doctor({
username: req.body.username,
fname: req.body.fname,
lname: req.body.lname,
email: req.body.email,
exp: req.body.exp,
dept: req.body.dept,
address: req.body.address,
hospInfo: req.body.hospInfo,
desc: req.body.description,
});
Doctor.register(newDoctor, req.body.password, function (err, doctor) {
if (err) {
console.log(err);
return res.redirect("back");
}
passport.authenticate("doctorLocal")(req, res, function (){ //local can be twitter fb for authentication
console.log("Doctor signup successfully Done");
res.redirect("/doctor-login");
});
});
});
//Doctor sign in
// process the login form
app.post('/doctor-login', function (req, res, next) {
passport.authenticate('doctorLocal', { failureFlash: true }, function (err, doctor, info) {
if (err) { return next(err); }
if (!doctor) { console.log("No doc found"); return res.redirect('/doctor-login'); }
req.logIn(doctor, function (err) {
if (err) { return next(err); }
return res.redirect('/doctor/' + doctor._id);
});
})(req, res, next);
});
//doctor home
app.get('/doctor/:id', isLoggedIn, function (req, res) {
Doctor.findById(req.params.id, function (err, doctor) {
if (err) {
console.log(err);
} else {
res.render("doctors/doctorhome", { doctor: doctor });
}
});
});
// //middleware to check whether it is logged in or not
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect("back");
}
请提供一个代码示例来演示这个问题抱歉,因为我刚刚接触堆栈溢出,我当时不知道如何添加代码,现在我编辑并添加了示例代码您的注释标志已被拒绝。请阅读。