node.js - 如何使用本地护照 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)
})
解决方案
我认为您的问题有两种方法。
- 不使用护照,并在 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']]);
});
- 使用护照并在您的
/ideas/add
页面中,需要 site_config 和重定向。但这对分贝不利。在第一个想法中,您只能访问数据库一次,但第二个想法应该两次。当然,会话(像 redis 一样保存在内存中)可能比 db 更好地获取 user'company 。
推荐阅读
- php - 如何使用 PHP 发送 iOS 推送通知?
- android - 尝试获取位置时避免 Google 的提示
- java - 如何在运行 maven 项目时消除特定错误
- python - 有没有办法测试数组中的所有数字是否都大于 A,如果是,则将其替换为相同长度的数组
- google-apps-script - 每月重置 Google 表单回复
- c - 在 SDL2 中获取鼠标位置的纹理坐标?
- terraform - terraform ssh:握手失败:ssh:无法验证,尝试的方法 [none publickey],没有支持的方法
- google-apps-script - 如何在同一个公式中使用 IF(AND() 和 IF(ISBLANK()?
- node.js - 如果我希望我的 graphql 端点不是 `/graphql`,如何使用 `GraphqlModule` 配置它?
- javascript - 选择小费时如何更新总金额