包含仅某些用户应该有权访问的信息的其余端点需要受到保护。 (最常见的方法是将 API 令牌传递给 API、oAuth 令牌或登录 cookie)。如果 userA 不应该访问 collectionB,则需要在该资源中进行检查,并向浏览器返回某种类型的错误代码。
大多数网站的标准错误是401: Unauthorized。这是一个简单的例子:
router.get("/word/:collection/:language/:amount", function(req, res) {
if ( !hasAccess(req.params.userToken) )
{
return res.send(401, {success: false, message: 'no permission'});
}
var collection = req.params.collection,
var language = req.params.language,
var amount = req.params.amount;
return getItems(req, res, collection, language, amount);
}
编辑:重新阅读您的问题后,我现在意识到用户需要在某个时间或另一个时间访问这两个集合。在这种情况下,您仍然需要实现一些服务器端验证。这是另一个例子(带测验/答案):
router.get("/quiz/finish/:id", function(req, res) {
//Store that this user has taken this quiz
return recordQuizAnswers(req.params.userToken, req.params.quizAnswers);
}
router.get("/quiz/answers/:id", function(req, res) {
//Has this user taken this quiz?
if ( !hasUserTakenQuiz(req.params.userToken) )
{
return res.send(401, {success: false, message: 'Trying to get the answers before taking the quiz? Cheater...'});
}
return getQuizAnswers(req.params.id);
}
编辑2:看到您的评论后,我想到了您可以使用的另一种解决方案。使用UUID's 作为 id 而不是自动递增的数字。这将防止用户简单地通过加/减来获得不同的测验。