لقد قمت بالفعل بتحديد 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. لقد أمضيت ساعات في البحث عن حل هنا، وعلى جوجل، وعلى ChatGPT (لماذا لا؟ :p) وما زلت لم أجد حلاً.
هل يعرف أي شخص كيفية إصلاح ذلك، من فضلك؟