为了账号安全,请及时绑定邮箱和手机立即绑定

创建用户登录并以组织 mongodb 身份登录

创建用户登录并以组织 mongodb 身份登录

回首忆惘然 2022-09-23 10:05:11

我正在构建一个应用程序,该应用程序需要注册和登录用户和组织。我正在使用节点js护照 - 相同的本地策略。我已经创建了所有视图,并与用户一起登录以工作,但是当我复制登录代码作为组织时,我收到意外的错误或被重定向到任何其他视图。


这是我的应用程序.js文件



// Passport Config

require('./config/Orgpassport')(Orgpassport);

require('./config/passport')(passport);



// Express session

app.use(

  session({

    secret: 'secret',

    resave: true,

    saveUninitialized: true

  })

);


// Passport middleware

app.use(passport.initialize());

app.use(passport.session());


// Connect flash

app.use(flash());


这是我的护照.js文件



const LocalStrategy = require('passport-local').Strategy;

const bcrypt = require('bcryptjs');


// Load User model

const User = require('../models/User');


module.exports = function(passport) {

  passport.use(

    new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {

      console.log(passport);

      // Match user

      User.findOne({

        email: email

      }).then(user => {

        if (!user) {

          return done(null, false, { message: 'That email is not registered' });

        }


        // Match password

        bcrypt.compare(password, user.password, (err, isMatch) => {

          if (err) throw err;

          if (isMatch) {

            return done(null, user);

          } else {

            return done(null, false, { message: 'Password incorrect' });

          }

        });

      });

    })

  );


  passport.serializeUser(function(user, done) {

    done(null, user.id);

  });


  passport.deserializeUser(function(id, done) {

    User.findById(id, function(err, user) {

      done(err, user);

    });

  });

};



这是我对登录表单的帖子请求。


router.post('/Orglogin', (req, res, next) => {

  passport.authenticate('local', {

    successRedirect: '/Orgdashboard',

    failureRedirect: '/org/Orglogin',

    failureFlash: true

  })(req, res, next);

});

我能够使用用户登录,但不能使用组织登录?


查看完整描述

1 回答

?
慕标5832272

TA贡献1628条经验 获得超4个赞

从您的前端添加一个例如,以便在您的后端您将能够识别该请求是针对组织的,然后在您的组织架构中添加一个像这样的布尔值,这将使您识别尝试登录的用户是否来自组织, 接下来在你的护照本地策略在这一行添加这个新的这将允许你得到,然后你可以用它来实现逻辑,使用你之前设置的参数并检查它是否存在,如果它存在,然后验证用户是否在数据库中,并检查是否设置为如果是, 验证用户正常,否则如果不包含组织,则意味着它不是来自组织,那么您以这种方式使用普通用户验证,您不需要使用2个本地策略,并且可以在此方案中使用两个不同的模型param"org""isorganisation=true"LocalStrategy({ usernameField: 'email' ,passReqToCallback:true}requestreq,params.orgisorganisationtruereq.params



查看完整回答
反对 回复 2022-09-23
  • 1 回答
  • 0 关注
  • 9 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信