Как перенаправить пользователей на разные страницы экспресс-js, используя локальный паспорт js? - PullRequest
0 голосов
/ 21 февраля 2019

Я работаю над проектом, в котором есть три компании (например, 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 ]

0 голосов
/ 26 февраля 2019

Код аутентификации подобен

 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);
0 голосов
/ 21 февраля 2019

Я думаю, 2 пути для вашего вопроса.

  1. не используйте паспорт и напишите URL перенаправления в site_config.js
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 и перенаправления.Но это не хорошо для БД.В первой идее, вы можете получить доступ к БД только один раз, а во второй идете - дважды.Конечно, сессия (сохраняйте в memery как redis) может быть лучше, чем db, чтобы получить пользовательскую компанию.
...