【发布时间】:2015-01-09 19:00:25
【问题描述】:
所以我想在 API 中创建一些路由,这些路由将根据 MongoDB 中定义的用户角色显示不同的数据。这是我现在拥有的样本,它可以工作......
router.get('/test', passport.authenticate('bearer', {session: false}), function (req, res) {
if (req.user.role == "premium") {
return res.send('you can see this content');
}
else {
return res.send('you can not see this content');
}
})
不过,最终目标是至少向用户展示一些东西,即使他们没有登录或使用正确的角色进行身份验证。
router.get('/test', passport.authenticate('bearer', {session: false}), function (req, res) {
if (req.user.role == "premium") {
return res.send('this is premium content');
}
else {
// could be hit by another role, or no user at all
return res.send([some truncated version of the premium content]);
}
})
我想我会弄清楚如何工作,但我不知道如何指定在请求中没有任何 Authorization 标头的情况下可能会被命中的相同路由。
这在 Passport.js/Express 中可行吗?
【问题讨论】:
-
我相信你必须建立自己的分叉才能允许这样做
-
fork 护照回购并添加功能,你的意思是这样吗?
-
我认为是这个。如果你正在使用它。 github.com/jaredhanson/passport-http-bearer。你应该看看这些行是github.com/jaredhanson/passport-http-bearer/blob/master/lib/…
-
我明白了,当然,绝对值得研究。但是我认为我需要提供另一个检查器,因为在某些内容上,如果他们没有授权,我仍然想将他们踢出去(就像默认情况下一样)。
-
那么您的护照中间件的修改版本也许应该查看当前路由并在它匹配特定的正则表达式时踢。或者路由回调仍然可以通过 res.send(401)
标签: node.js express roles passport.js