2017-12-21 60 views
0

これは、コード構成とよりスッキリなアプローチで、一般化することができます。具体的には、AJAX/JSONのスキルを向上させるために構築しているJeopardyクイズです。私はその答えを質問とは別にしておきたいと思います。 DevToolsでJSONを見つけて開くだけで、正しい答えを見つけることができます。私はそれをもう少し難しくしたいと思いますが、1つまたは2つのJSONファイルをコード化したりレイヤーを追加したりするのは難しくありません。 (ちょうどペットプロジェクト以来、DBクエリをハッシュしているように過酷ではない)。JSONを使用してクイズに答えキーを提供するきれいな方法

ないこれを行う方法がわから... ここに私のJSONだ... { "質問": "ジェファーソンがモンティチェロを建てタウン"、 "選択肢":[ "リッチモンド"、 "Raliegh"、 「シャーロッツビル」 ] }

私はJSONに質問して正解だったが、私はそれがこれを行うための最善の方法であるかわからない...私はanwserキーが良いかもしれないと思います。

答えて

1

JSONオブジェクトのbase64エンコーディングを行うことです(これを簡単に行うこともできます)。

まず、すべての質問があれば、それらをbase64にエンコードします。 JavaScriptでbtoa関数を使用すると、これを行うことができます。あなたのクライアントにこのコード行を入れないでください。

btoa(JSON.stringify({ "question": "Town where Jefferson built Monticello", "choices": [ "Richmond", "Raliegh", "Charlottesville" ] })) 

次に、そのbase64でエンコードされた文字列をコードに配置します。

const data = "eyJxdWVzdGlvbiI6IlRvd24gd2hlcmUgSmVmZmVyc29uIGJ1aWx0IE1vbnRpY2VsbG8iLCJjaG9pY2VzIjpbIlJpY2htb25kIiwiUmFsaWVnaCIsIkNoYXJsb3R0ZXN2aWxsZSJdfQ==" 

そこからデコードし、コード内のJSONオブジェクトに戻すことができます。

let questions = JSON.parse(atob(data)) 

あなたの質問で言及したように、これはまだ「ハッキングされている」可能性があります。それは決して適切なセキュリティではありません。人々はそれを調べて、コードを実行して質問と回答を得ることができます。しかし、その答えは一目瞭然ではないでしょう。

少し上手くするために、難読化ツールでJavaScriptを実行できます。 dataquestionsの変数は混乱して、何がデコードされているのかを特定するのが少し難しくなります。

0

質問IDと選択された回答を取得するエンドポイントを作成し、正しいかどうかを返信し、間違った場合に正しい答えを返して、そのプロセスのそのユーザー/セッションの回答としてマークします。

このようにして、ユーザーがDevToolsなどを使用してAPIにヒットしても、その効果はUIを介した回答と同じになります。

+0

Hmm。最初にあなたがエンドポイントと言ったときに、あなたは単純に質問IDと選択された回答を送っていると思っていました。それが200と答えたらそれは正しいでしょう。しかし、誰かがちょうど2回それを取ることができるように、私は答えをあきらめたくないので、私はまったく正しい答えを提供することを考えなかった。しかし、問題銀行が十分に大きく成長し、無作為化されれば、正解と説明を提供することは理にかなっています。私はあなたの道を試みます。 – madpixl

+0

だからこそ私はその人がすでにその質問に答えていることを記している。発生させた懸念事項は、ユーザーがUIを使用して質問に何度も回答を試みた場合と同じです。いくつかの種類のセッション管理は、私の考えでは、それを処理する最も簡単な方法でしょう。正しい答えを返すかどうかは、あなたが行っているUXの問題です。私はこのようにしていますが、答えが間違っていることだけを示すこともできます。私は両方のアプローチを取ってオンラインクイズを見ました。 –

関連する問題