Passport-local mongoose node.js 支持多种用户类型

Abh*_*t S 5 authentication mongodb node.js passport-local passport.js

我想要两种类型的用户登录(用户、客户端)。我到底如何在 app.js 中为两种类型创建 localStrategies、序列化和反序列化用户 我有两个单独的架构,都使用 PassportLocalMongoose 插件。

我目前配置我的护照如下,

var User = require('./models/User');
var Client= require('./models/Client');
passport.use(new LocalStrategy(User.authenticate(), Client.authenticate()));
passport.serializeUser(User.serializeUser(), Client.serializeUser());
passport.deserializeUser(User.deserializeUser(), Client.deserializeUser());
Run Code Online (Sandbox Code Playgroud)

问题出在我尝试注册时。注册为用户有效,但作为客户端显示“未经授权”错误。我该如何解决这个问题?

Abh*_*t S 5

在浏览了 Passport.js 的文档(感谢 Jared)之后,我明白我几乎做错了所有事情。

  1. 创建了两个 localStrategies

    passport.use('userLocal', new LocalStrategy(User.authenticate())); passport.use('clientLocal', new LocalStrategy(Client.authenticate()));

并进行身份验证,

passport.authenticate('userLocal')(req, res, function () {
    res.redirect('/profile');
  });
and
passport.authenticate('clientLocal')(req, res, function () {
    res.redirect('/client');
  });
Run Code Online (Sandbox Code Playgroud)
  1. 使用 Passport 模块(l=不使用 Passport-local-mongoose 模块)进行序列化用户和反序列化用户。

    passport.serializeUser(function(user, done) { done(null, user); });

    passport.deserializeUser(function(user, done) { if(user!=null) done(null,user); });

整个用户架构(对象)现在存储在请求中,并且可以通过任何路由进行访问。

希望它可以帮助其他遇到类似问题的人。