node.js - 如何使用nodejs和passport在我的应用程序中有两个不同的登录名?
问题描述
我在这里使用 mongodb、mongoose、express、passport(及其依赖项)!
基本上,我有一个适用于“用户”模型的功能登录,我想创建另一个适用于“员工”模型的登录。问题是,当我尝试创建“员工”登录和身份验证时,我复制了我为“用户”所做的操作,但它不起作用。该应用程序无法识别有员工登录,就像我使用用户登录时一样。当我在员工登录后执行console.log isAuthenticated时,它说这是错误的,这意味着没有人登录......我能够很好地注册用户和员工,问题主要在登录后,其中用户登录工作正常,而员工登录不工作。
我不想创建不同的角色,我想创建两个不同的登录名。
我正在使用以下模型:
这个给用户
var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");
var UserSchema = new mongoose.Schema({
username:String,
password:String,
isAdmin: {type:Boolean, default:false}
})
UserSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", UserSchema);
这是给员工的
var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");
var EmployeeSchema = new mongoose.Schema({
username:String,
password:String,
firstname:String,
lastname:String,
birth:String,
adress:String,
role:String,
education:String,
experience:String
})
EmployeeSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("Employee", EmployeeSchema);
这是我在主 app.js 中使用的代码(引用护照配置和登录路由的部分)。用户和员工的注册路线都工作正常。不知何故,我觉得问题出在这部分,即使我不知道这是否只是我编码的方式。
**//PASSPORT CONFIGURATION**
app.use(require("express-session")({
secret: "secret",
resave: false,
saveUninitialized:false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use('user',new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
passport.use('employee',new LocalStrategy(Employee.authenticate()));
passport.serializeUser(Employee.serializeUser());
passport.deserializeUser(Employee.deserializeUser());
这是用户登录的发布路线
app.post("/login", passport.authenticate("user",{successRedirect:"/",failureRedirect:"/login"}),function(req,res){
})
这是员工登录的发布路线
app.post("/employeelogin", passport.authenticate("employee",{successRedirect:"/",failureRedirect:"/employeelogin"}),function(req,res){
})
对不起,如果这太长了......任何帮助表示赞赏!我已经这样做了 3 天,在 console.logs 中尝试解决这个问题,但我还没有找到解决方法。感谢您的关注!
PS:我在这里看到了这个线程:使用节点护照进行两次不同的登录, 但我没有正确理解他正在尝试做的事情