2017-12-21 37 views
0

이것은 일반화가 가능한 코드 구성 및 더 매끄러운 접근 방법에 대한 것입니다. 특히 Jeopardy 퀴즈에서 AJAX/JSON의 기술을 향상시키기 위해 구축하고 있습니다. 나는 그 질문에 대한 답변을 유지하고 싶다. DevTools에서 JSON을 찾고 열어 올바른 답을 찾을 수 있습니다. 좀 더 어렵게 만들고 싶지만 한두 개의 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

흠. 처음 엔 끝점이라고 말했을 때 단순히 질문 ID와 대답을 보내는 것이라고 생각했습니다. 200으로 답했다면 옳은 것입니다. 그러나 누군가가 단지 그것을 두 번 할 수 있도록 대답을 포기하고 싶지 않았기 때문에 나는 정답을 제공하는 것에 대해 생각하지 않았습니다. ... 그러나 질문 은행이 충분히 커지고 무작위로 추출되면 정답과 설명을 제공하는 것이 타당합니다. 나는 너의 방법을 시도 할 것이다. – madpixl

+0

그 이유는 그 사람이 이미 그 질문에 대답했다는 표시를 언급했기 때문입니다. 제기 한 관심사는 사용자가 UI를 통해 질문에 여러 번 대답하려고했던 것과 같습니다. 어떤 종류의 세션 관리가이를 처리하는 가장 간단한 방법 일 것이라고 생각합니다.정답을 반환하는 것과 관련해서는 UX의 문제입니다. 나는이 방법으로 그것을 할 것이지만, 당신은 그 대답이 잘못되었음을 보여줄 수 있습니다. 두 가지 접근 방식을 취하는 온라인 퀴즈를 보았습니다. –