이 문제를 조사한 지 몇 시간이 지났고, 거의 해결된 것 같지만 올바른 방향으로 조금만 밀어주면 될 것 같습니다.
기본적으로 저는 이미 자체 DB에 인증된 사용자가 포함된 React 프로젝트에 Discourse를 헤드리스(headless) 구현으로 통합하려고 합니다.
이를 위해 사용자가 React 페이지에서 로그인할 때, Discourse API와 인증할 수 있도록 사용자의 SSO를 수행하여 적절한 함수 등을 호출할 수 있도록 하려 합니다.
먼저, Discourse URL에서 데이터를 가져오며 리다이렉트를 방지하기 위해 다음과 같이 설정했습니다:
const response = await fetch('https://forum.mysite.com/session/sso', {
method: 'GET',
redirect: 'manual', // 리다이렉트 자동 추적을 방지
});
그다음 전체 검증 과정을 거치고 사용자 정보를 담은 페이로드를 백엔드로 전송하기 위해 다음을 사용합니다:
const loginResponse = await fetch(newurl.toString(), {
method: 'GET',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
redirect: 'manual',
});
포맷팅과 서명 등 모든 것이 정상적으로 보이지만, 에러가 발생합니다. 그래서 이 부분을 주석 처리하고 생성된 URL을 브라우저에 복사해서 붙여넣어 보니 다음과 같은 결과가 나타났습니다:
Verbose SSO log: Nonce is incorrect, was generated in a different browser session, or has expired add_groups: admin: avatar_force_update: avatar_url: bio: card_background_url: confirmed_2fa: e
조사를 좀 더 해본 결과, 아래 답변들이 제 문제를 해결하는 데 도움이 될 것 같지만, 제 환경에 맞게 무엇을 변경해야 하는지 여전히 명확하지 않습니다. 또한 force_https는 더 이상 조작할 수 있는 설정이 아닌 것 같습니다(무엇을 하는 설정인지도 확실하지 않아요):
다른 브라우저 세션 때문인 것 같기도 하지만, 확실하지는 않습니다. 그래도 이 문제를 해결하는 데 거의 다 왔다고 생각합니다. 그저 작은 힌트만 필요합니다. 도움이 될 만한 정보가 있다면 알려주세요. 감사합니다!
