Node.js 使用同一用户模型的第二个passport策略?

Node.js 使用同一用户模型的第二个passport策略?,node.js,mongoose,passport.js,Node.js,Mongoose,Passport.js,不久前,我启动了一个节点项目,使用node、Express、MongoDB和Passport使用Passport local mongoose进行用户身份验证使用会话,我的用户模型如下所示: const mongoose = require("mongoose"); const passportLocalMongoose = require("passport-local-mongoose"); var UserSchema = new mongoose.Schema({ username

不久前,我启动了一个节点项目,使用node、Express、MongoDB和Passport使用Passport local mongoose进行用户身份验证使用会话,我的用户模型如下所示:

const mongoose = require("mongoose");
const passportLocalMongoose = require("passport-local-mongoose");

var UserSchema = new mongoose.Schema({
  username: String,
  email: String,
  password: String,
  //etc

});

UserSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", UserSchema);
现在我想为同一个webapp创建一个react原生应用程序,所以我想使用相同的用户数据库

我的问题是:我可以在网站上现有的用户模型和身份验证策略的基础上使用passport jwt之类的工具吗?或者你们建议我只使用jsonwebtokens for auth重新创建完整的项目,然后尝试导入当前用户数据库


谢谢

您可以使用相同的数据库实施新策略。创建一个passport.js文件,并启动要用于该用户的策略类型。从那里,您可以调用相同的模型,并从相同的数据库检查该用户的身份验证。您还需要在模型中编写ComparePassword函数。因此,您可以比较您的登录密码,并为web前端维护会话

    passport.use('user',new LocalStrategy({    
        usernameField: 'email',
        passwordField: 'password'

    }, function (username, password, done) {

        Collection.findOne({username: username}, (err, user) => {

            if (err) {
                return done(err);
            }
            if (!user) {
                return done(null, false, {"user not found"});
            }        
            user.comparePassword(password, (err, isMatch) => {
                if (err) {
                    return done(err);
                }
                if (!isMatch) {
                    return done(null, false,  {"wrong password"});
                }
                return done(null, user);
            });
        });
    }
));
在passport.js中添加isAuthenticated和isAuthenticated函数

passport.isAuthenticated = (req, res, next) => {  
if (req.isAuthenticated()) {
    return next();
}
res.status(401);
return next({"user not authenticated"});
};
passport.isAuthorized = (userType) => {   
    return (req, res, next) => {
        if (req.user.userType == userType) {       
            return next();
        }
        res.status(403);
        return next({"user not authorized"});
    };
};
这里userType用于不同级别的用户,例如:管理员/版主等

现在在route中,只需在转到实际函数之前调用auth函数

app.post('/apiRoute',passport.isAuthenticated, passport.isAuthorized('ADMIN'),controllerFile.actualFunction;