特定のユーザーのみの情報を含む残りのエンドポイントには、セキュリティを確保する必要があります。 (最も一般的な方法は、API、oAuthトークン、またはログインCookieに渡されるAPIトークンです)。 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);
}
編集:あなたの質問を再読み込みした後、私は今、ユーザーが1つのポイントまたは別の時に両方のコレクションへのアクセス権を持っている必要がありますことを実現しています。この場合でも、サーバー側の検証を実装する必要があります。ここでは(クイズ/答えと)別の例です:
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のIDを使用してください。これにより、ユーザは簡単に追加/減算して異なるクイズを得ることができなくなります。
ありがとうございます。それは私の言いたいことではありませんが、私は思っています。 「特定のクイズのデータを取得しなければならない場合、一般的にユーザーが利用できる複数のクイズがある場合はどうすればよいでしょうか?」というようなものがあります: "router.get("/quiz /:quizID /答え/ "、function(req、res)...."私が "quizID"を操作すると間違ったクイズの回答が得られますユーザーはこれらの両方のクイズにアクセスできます。 –
更新された回答を見る@DeanVaessen(Edit 2) – FrankerZ
Hmmmしかし、これを正しく理解すれば、私がページAに行くとそれを悪用することができます。そのUUIDをメモしてくださいそのコレクションに使用し、ページBに行き、JavascriptでUUIDを変更し、ページAのコレクションを取得します。 –