首页 > 解决方案 > 如何使用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:我在这里看到了这个线程:使用节点护照进行两次不同的登录, 但我没有正确理解他正在尝试做的事情

标签: node.jsmongodbmongoosepassport.js

解决方案


推荐阅读