【发布时间】:2015-08-07 10:42:18
【问题描述】:
根据用户登录状态,我想从 SAME api 端点提供不同的结果。
用例是从相同的 api 端点提供文章。 所以有些文章是公开的,而有些是私人的。 还有专门的页面,可以查询文章列表。
示例: api/articles/special/all
此 API 应返回数据库中当前的所有页面。 但如果用户未登录,它也应该过滤掉私人结果。
使用 Passport.js 我只能保护整个 API 端点,例如:
router.get('/', auth.isAuthenticated(), controller.index);
虽然我想在实际函数中调用 auth.isAuthenticated() 方法,例如:
// Get list of articles
exports.index = function(req, res) {
Article.find(function (err, articles) {
if(err) { return handleError(res, err); }
var titles = [];
var loggedIn = false;
if (auth.isAuthenticated()) {loggedIn = true;} // NOT WORKING
for (var i = 0; i<articles.length; ++i) {
if (articles[i].role === 'loggedIn' && loggedIn) {
titles.push(articles[i].name);
} else if(articles[i].role !== 'loggedIn') {
titles.push(articles[i].name);
}
}
return res.json(200, titles);
});
};
任何想法,如何在控制器内使用 Passport.js,而不是保护整个 API 端点?
【问题讨论】:
标签: node.js authentication passport.js