首页 > 解决方案 > 如何使用本地护照 js 将用户重定向到 express js 上的不同页面?

问题描述

我正在从事一个拥有三个公司(即 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)
})

标签: node.jsexpresspassport.jspassport-local

解决方案


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

  1. 不使用护照,并在 site_config.js 中写入重定向 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 。

推荐阅读