首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Passport-local mongoose node.js支持多种用户类型

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

Stack Overflow用户
提问于 2018-02-17 00:39:43
回答 3查看 3.2K关注 0票数 5

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

我现在像下面这样配置我的护照,

代码语言:javascript
复制
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());

问题出在我尝试注册的时候。注册为用户可以工作,但作为客户端显示“未授权”错误。我如何解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2018-02-17 02:11:26

在浏览了passport.js的文档之后(对Jared赞誉有加),我明白我几乎做错了所有的事情。

  1. 创建了两个localStrategies

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

并进行身份验证,

代码语言:javascript
复制
passport.authenticate('userLocal')(req, res, function () {
    res.redirect('/profile');
  });
and
passport.authenticate('clientLocal')(req, res, function () {
    res.redirect('/client');
  });

  1. 将passport模块(使用passport-l=not-mongoose模块的passport模块)用于serializeUser和deseriealizeUser。

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

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

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

希望它能帮助其他人解决类似的问题。

票数 4
EN

Stack Overflow用户

发布于 2019-04-02 12:28:19

您可以在mongoose模式中创建角色,并将其分配给用户或客户端。您可以根据角色进行身份验证

票数 0
EN

Stack Overflow用户

发布于 2019-11-28 23:07:36

您需要创建两个策略,并编辑序列化和反序列化函数以支持多种格式当您调用authenticate()时,您可以指定startegy名称

例如,在中间件中

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

在passport-config.js中

代码语言:javascript
复制
  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);
    }

    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48831211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档