【问题标题】:Authenticate multiple models in passport.js在 passport.js 中验证多个模型
【发布时间】:2018-03-22 03:04:19
【问题描述】:

所以在过去的一个小时里,我一直在寻找在 passport.js 中登录时验证多个模型的方法,但无济于事。 我的应用程序有 2 个模型,教师和学生,我想创建一个登录页面来检查它是教师还是学生,然后登录,我尝试在 app.js 中序列化和反序列化这两个模型,但似乎没有'不知道要验证哪一个,有什么办法可以做到这一点?

编辑: 我的学生和老师的收藏中都有一个职位字段,1 个学生和 2 个老师。 似乎passport.use()被第二次passport.use()调用覆盖了,结果我只能通过Student登录,如果我翻转它们,我可以登录Teacher。

app.use(passport.initialize());
app.use(passport.session());

passport.use(new localStrategyTeacher (Teacher.authenticate()));
passport.use(new localStrategyStudent (Student.authenticate()));

passport.serializeUser((user, done) => {
    let type;
    if (user.position === 1) {
        type = 'student';
    } else  {
        type = 'teacher';
    }

    done(null, {id: user.id, type});
});

passport.deserializeUser((key, done) => {
    if(key.type === 'student'){
        Student.findById(key.id, function(err, user) {
          done(err, user);
        });
      } else {
        Teacher.findById(key.id, function(err, user) {
          done(err, user);
        });
      }
});

【问题讨论】:

    标签: javascript node.js passport.js


    【解决方案1】:

    对不起,我没有足够高的分数来发表评论:)。如果没有更大的 sn-p,这有点难以分辨,但似乎以下护照问题可能会提供您正在寻找的答案

    https://github.com/jaredhanson/passport/issues/50

    您的 passport.serializeUser 和 deserializeUser 需要更复杂一些,例如。 (未测试抱歉)

    passport.serializeUser(function(user, done) {
      let type = user.isTeacher() ? 'teacher' : 'student';
      done(null, { id: user.id, type: type});
    });
    
    passport.deserializeUser(function(data, done) {
      if(data.type === 'student'){
        Student.findById(data.id, function(err, user) {
          done(err, user);
        });
      } else{
        Teacher.findById(data.id, function(err, user) {
          done(err, user);
        });
      }
    });
    

    【讨论】:

    • 感谢您的回答,但对我来说没有用,我已经更新了我的问题。
    • 在什么情况下不起作用?查看您的更新,我可以在 SERLizer 中看到一个错误。最后一行应该是done(null, {id: user.id, type:type});
    猜你喜欢
    • 2015-07-13
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多