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

时间:2018-02-16 16:39:43

标签: node.js mongodb authentication passport.js passport-local

我想要两种类型的用户登录(用户,客户端)。我怎样才能在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());

问题在于我尝试注册时。注册为用户工作,但作为客户显示"未授权"错误。 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

在浏览了passport.js的文件(对Jared的称赞)之后,我明白我几乎都做错了。

  1. 创建了两个localStrategies

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

  2. 并进行身份验证,

    passport.authenticate('userLocal')(req, res, function () {
        res.redirect('/profile');
      });
    and
    passport.authenticate('clientLocal')(req, res, function () {
        res.redirect('/client');
      });
    
    1. 使用过护照模块(l =不使用passport-local-mongoose模块)进行serializeUser和deseriealizeUser。

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

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

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

      希望它可以帮助其他类似问题。

答案 1 :(得分:0)

您可以在猫鼬模式中扮演角色,并将其分配给用户或客户端。根据角色可以进行身份​​验证

答案 2 :(得分:0)

您需要创建两个策略并编辑序列化和反序列化功能以支持多种格式 调用authenticate()时,您可以指定启动名

例如 在中间件

exports.authenticateUserA = function (req, res, next) {
    console.log('authenticateA', req.body.hostname)
    passport.authenticate('loginA', {failureRedirect: '/login-fail',successRedirect: "/home"}, function (err, player, info) {}})

在password-config.js中

  passport.serializeUser(function (user, done) {
     console.log('deserialize user ')
     if (typeof user.mac_address == 'undefined') {

      user.data_type = 'userTypeA'
      done(null, user);
     } else{
        user.data_type = 'userTypeB'
        done(null, user);
    }

    });