【问题标题】:Clean way to provide answer key to quiz with JSON使用 JSON 为测验提供答案键的简洁方法
【发布时间】:2017-12-21 09:19:43
【问题描述】:

这更多是关于代码组织和更简洁的方法,可以概括。特别是在我正在建立的危险测验中,以提高我在 AJAX/JSON 方面的技能。我想将答案与问题分开。只需在 DevTools 中查找并打开 JSON 即可找到正确答案。我想让它变得更难一点,但不是太难编码或在一个或两个 JSON 文件之后添加更多层。 (不要像散列数据库查询那样矫枉过正,因为它只是一个宠物项目)。

不知道该怎么做... 这是我的 JSON .. { “问题”:“杰斐逊建造蒙蒂塞洛的小镇”, “选择”:[ “里士满”, “雷利”, “夏洛茨维尔” ] }

我对 JSON 中的问题有正确的答案,但我不确定这是最好的方法...我认为 anwser 键可能会更好。

【问题讨论】:

    标签: javascript json ajax architecture client-side


    【解决方案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 的变量会被破坏,识别正在解码的内容会有点困难。

    【讨论】:

      【解决方案2】:

      我会创建一个端点来获取问题 ID 和所选答案,返回它是否正确和正确答案,以防错误,在此过程中将问题标记为该用户/会话的已回答。

      这样,即使用户使用 DevTools 或类似工具点击您的 API,效果也会与通过 UI 回答相同。

      【讨论】:

      • 嗯。起初,当您说端点时,我以为您只是在发送问题 ID 和选择的答案。如果它以 200 响应,那将是正确的。但是我根本没有考虑提供正确的答案,因为我不想泄露答案,所以有人可以拿两次。 ...但是如果问题库足够大并且它们是随机的,那么提供正确的答案和解释是有意义的。我会试试你的方法。
      • 这就是为什么我提到标记这个人已经回答了这个问题。您提出的担忧与用户尝试通过 UI 多次回答问题相同。在我看来,某种会话管理将是处理该问题的最简单方法。至于是否返回正确答案,这取决于您要追求的用户体验。我会这样做,但你也只能表明答案是错误的。我见过采用这两种方法的在线测验。
      猜你喜欢
      • 2014-04-14
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      相关资源
      最近更新 更多