【问题标题】:How to redirect users to different page on express js using passport-local passport js?如何使用本地护照 js 将用户重定向到 express js 上的不同页面?
【发布时间】:2019-07-14 19:11:55
【问题描述】:

我正在开展一个项目,其中有三个公司(即 compA、CompB、compC)。 每个公司都有自己的用户。 这是我的用户架构,用户可以与特定公司相关联

    const UserSchema = new Schema({
        name:{
            type: String,
            required: true
        },
        company:{
            type: String,
            required: true
        },
        password:{
            type: String,
            required: true
        },
        role:{
            type: String
        }, 
        date:{
            type: Date,
            default: Date.now
        }   
    })

const User = mongoose.model('users', UserSchema)

我唯一关心的是如何根据用户关联的公司将用户重定向到特定页面。

现在我正在使用此代码作为我的登录名,在连续登录后它会转到“添加”页面。有什么方法可以让我将特定的登录用户重定向到特定的页面?

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

    passport.authenticate('local', {
        successRedirect: '/ideas/add',
        failureRedirect: './login',
        failureFlash: true
    })(req, res, next)
})

【问题讨论】:

  • 我认为如果你将他们重定向到相同的路线会更好,并使用动态模板让每个用户根据他们的公司看到特定的页面。
  • 这个问题确实比问题所暗示的更根深蒂固,你在这里问的是如何实现multitenancy,这个问题以前在这里已经回答过几次,但它也是一个我认为过于宽泛。

标签: node.js express passport.js passport-local


【解决方案1】:

我认为您的问题有两种方法。

  1. 不使用passport,在site_config.js中写redirect url
site_config['url_base_on_company'] = {'a'=>'www.a.com','b':'www.b.com'};
const site_config = require('site_config');
User.findOne({where,'attributes': ['id','company']}.then(user=>{
    if(!user){
    // redirect relogin page
    //return
    }
    //session
    redirect(site_config[user['company']]);
});
  1. 使用护照并在您的/ideas/add 页面中,需要site_config 和重定向。但这对分贝不利。在第一个想法中,您只能访问数据库一次,但第二个想法应该两次。当然,会话(像 redis 一样保存在内存中)可能比 db 更好地获取 user'company 。

【讨论】:

  • 感谢您的建议 :) 我真的很感激
【解决方案2】:

验证码是这样的

 passport.authenticate('local',function (err, user, info) { 
     if(err){
      res.redirect('/login')
     } else{
      if (! user) {
        res.redirect('/login')
      } else{
        req.login(user, function(err){
          if(err){
            res.redirect('/login')
          }else{

                 if(user.company == 'company1'){
                   res.redirect('url for company1')
                    }
                if(user.company == 'company2'){
                   res.redirect('url for company2')
                    }

          }
        })
      }
     }
  })(req, res);

【讨论】:

  • 感谢您的评论。我通过在创建用户时分配公司名称来实现这一点,当用户登录时,它会检查分配给的公司并相应地重定向它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2020-12-09
  • 2015-11-01
  • 2020-01-30
  • 2017-08-18
  • 2017-11-02
  • 1970-01-01
相关资源
最近更新 更多