Roc*_*CTZ 1 mongoose node.js express passport-local passport.js
我正在使用Express/Node.js和Passport.js(本地护照)和Mongoose构建应用程序.
有两种用户:
/user-login页面和护照策略登录'local-user-login';常规用户存储在"用户"MongoDB集合中)/admin-login页面和护照策略登录'local-admin-login';管理员存储在"Admins"MongoDB集合中)我还有2个页面:(只/user_home需要记录的普通用户可以访问)和/admin_home(仅限登录的管理员)
路线/user_home:
app.get('/user_home', isLoggedIn, function(req, res) {
// render the page
});
function isLoggedIn(req, res, next) {
if (req.isAuthenticated())
return next();
res.redirect('/login');
}
Run Code Online (Sandbox Code Playgroud)
如果我以管理员身份登录并尝试访问/user_home,则不允许我这样做,这很好.我的问题是:如何定义另一个" isLoggedIn"函数来检查我是以管理员而不是普通用户身份登录的?理想情况下,我希望有一个函数"isLoggedInAsUser",另一个函数是"isLoggedInAsAdmin".
到目前为止,我尝试/admin_home 以相同的方式定义路线:
app.get('/admin_home', isLoggedIn, function(req, res) {
// render the page
});
Run Code Online (Sandbox Code Playgroud)
但很明显为什么它不起作用.代码不知道我希望它检查它是否是管理员而不是普通用户.
Passport存储经过身份验证的用户req.user.所以你可以写这样的中间件函数:
function allowAdmins(req, res, next) {
if (req.user.role === 'Admin') return next();
res.redirect('/user-login');
}
function allowRegular(req, res, next) {
if (req.user.role === 'Regular') return next();
res.redirect('/admin-login');
}
Run Code Online (Sandbox Code Playgroud)
然后在路线:
var userRouter = express.Router();
userRouter.use(isLoggedIn);
// Only authenticated users are allowed
userRouter.get('/home', isRegular, function (req, res) {});
userRouter.get('/admin', isAdmin, function (req, res) {});
app.use('/user', userRouter);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |