我正在开发一个有三家公司的项目(即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)
})
我认为你的问题有2种方法。
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']]);
});
/ideas/add
页面中,需要site_config和重定向。但这对db来说并不好。在第一个想法中,你只能访问db一次,但第二个想法应该两次。当然,会话(保存在像redis这样的memery)可能比db更好地获得用户公司。验证码就像
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);