이미 enable discourse connect를 확인했고, discourse connect url을 지정했으며, discourse connect secret도 성공적으로 설정했습니다.
discourse connect url 페이지에서는 다음과 같은 작업을 수행하고 있습니다:
function rediretUserToDiscourse(user) {
const url = new URL(window.location)
const searchParams = new URLSearchParams(url.search);
const ssoValue = searchParams.get("sso");
const decodedSSOValue = window.atob(ssoValue);
const queryParams = decodedSSOValue.split("&");
let nonce = null;
for (let param of queryParams) {
const [key, value] = param.split("=");
if (key === "nonce") {
nonce = value;
break;
}
}
if (user) {
const payload = `nonce=${nonce}&name=${user.username}&username=${user.username}&email=${user.email}&external_id=${user.id}&avatar_url=${user.avatar}`;
const encodedPayload = window.btoa(JSON.stringify(payload));
const secret = "discourse_connect_secret";
hmac(encodedPayload, secret, HmacAlgorithms.HmacSHA256, Encoders.hex)
.then(signature => {
if (signature) {
const discourseLoginURL = `https://community.mydomaine.co/session/sso_login?sso=${encodedPayload}&sig=${signature}`;
window.location.href = discourseLoginURL;
}
});
}
};
모든 것이 완벽하게 작동합니다(서명이 유효하고 discourse로 리디렉션됩니다). 하지만 계속 다음과 같은 오류가 발생합니다: Nonce is incorrect, was generated in a different browser session, or has expired(Nonce가 올바르지 않거나, 다른 브라우저 세션에서 생성되었거나, 만료되었습니다). 이 사이트, 구글, ChatGPT(왜 안 될까요 :p)에서 몇 시간 동안 해결책을 찾아봤지만 아직 해결책을 찾지 못했습니다.
혹시 이 문제를 어떻게 해결할 수 있는지 아시는 분이 계신가요? 부탁드립니다.