내 게시물을 다시 읽어보니, 요청에서 $json 변수가 어떻게 설정되었는지 설명하지 않았다는 것을 알았습니다. 데이터 구조를 파악하는 가장 쉬운 방법은 Discourse UI를 통해 원하는 범위로 단일 사용자 API 키를 생성하는 요청을 한 다음, /admin/api/keys로 전송되는 요청 페이로드의 값을 확인하는 것입니다:
Hi @simon, 답변해 주셔서 감사합니다. 저희 상황을 좀 더 자세히 설명드리겠습니다.
저희는 Discourse 엔드포인트의 백엔드 로직에 의존하는 모바일 앱을 개발하고 있습니다. 사용자가 앱을 통해 로그인하면 로그인 데이터가 session.json을 통해 Discourse API로 전송되고, 이 API는 쿠키를 반환합니다. 이 쿠키는 웹뷰를 /user-api-key/new로 리디렉션하여 사용자가 승인하도록 프롬프트하는 데 사용됩니다. 승인 후 페이로드가 복호화되어 API 키로 변환됩니다.
이 경우, 모바일 앱 내에서 API 키를 전역 토큰으로 사용하여 다른 Discourse 엔드포인트에 액세스할 수 있습니다. 그러나 사용자가 로그아웃하면 토큰이 전역 상태(global state)에서 제거되어야 하며, 이를 통해 새 토픽 생성과 같은 엔드포인트에 액세스할 수 없도록 해야 합니다.
제 질문은 이 토픽과 관련되어 있습니다: 사용자가 이미 user_api_keys를 가지고 있는지, 그리고 그것들이 여전히 활성 상태인지 어떻게 확인할 수 있을까요? 키가 존재하고 활성 상태라면, 사용자는 로그인 후 이를 사용할 수 있어야 합니다. 그렇지 않다면, 사용자는 새로운 user_api_keys를 생성해야 하며, 이는 웹뷰에서의 승인을 필요로 합니다.
또한 Generate User API Key Without User Approval - #2 by simon 게시물도 참고했습니다. 이 게시물은 처음에 API 키 구현을 위해 살펴본 자료였습니다. 그러나 문제는 여전히 동일합니다: /admin/api/keys를 확인해도 데이터베이스에 이미 저장된 API 키의 값을 가져오거나 사용자별 API 키를 조회할 수 없습니다. 저는 이 구현을 위해 API 키를 저희 자체 데이터베이스에 저장해야 한다고 생각합니다.
안녕하세요, 제안을 주셔서 감사합니다. 여기서 Discourse Connect를 사용하지 않는 이유는 다른 웹사이트나 외부 서비스와 Discourse를 연결하지 않기 때문입니다. 모든 로그인 기능은 Discourse를 통해 직접 처리되며, 앱은 오직 Discourse와만 상호작용합니다.
여러분의 앱은 또 다른 곳이죠. 여러분이 Discourse Connect 클라이언트로 앱을 설정하여 사람들이 Discourse에 로그인함으로써 여러분의 앱에도 로그인할 수 있도록 하기를 원한다고 꽤 확신합니다. 그런 다음 여러분의 앱이 Discourse와 상호작용할 수 있을 것 같습니다. 아니면 아마도 제가 앱이 어떻게 작동하는지 이해하지 못하고 있는 걸 수도 있겠네요.