Подключение SSO: ошибка входа sso_login

Я провел несколько часов исследований по своей проблеме и думаю, что уже близко к решению, но, возможно, мне нужен небольшой толчок в правильном направлении.

По сути, я пытаюсь интегрировать Discourse как headless-решение в свой React-проект, который уже содержит аутентифицированных пользователей в собственной базе данных.

Для этого, когда пользователь входит в систему на странице React, будет выполняться SSO для аутентификации пользователя через API Discourse, чтобы мы могли вызывать соответствующие функции и так далее.

Сначала я делаю запрос к URL-адресу Discourse и предотвращаю любые перенаправления следующим образом:

const response = await fetch('https://forum.mysite.com/session/sso', {
    method: 'GET',
    redirect: 'manual', // Предотвращение автоматического следования перенаправлениям
  });

Затем я выполняю всю процедуру валидации и отправляю Payload с информацией о пользователе на бэкенд, используя:

const loginResponse = await fetch(newurl.toString(), {
    method: 'GET',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    redirect: 'manual',
  });

Форматирование, подпись и прочее выглядят правильно. Но я получаю ошибку. Поэтому я закомментировал этот код, скопировал сгенерированный URL в браузер, чтобы посмотреть, что происходит, и получил следующее:

Подробный лог SSO: Nonce неверен, был сгенерирован в другой сессии браузера или истек add_groups: admin: avatar_force_update: avatar_url: bio: card_background_url: confirmed_2fa: e 

После некоторых исследований я думаю, что эти ответы близки к тому, чтобы помочь мне, но я все еще не совсем понимаю, что нужно изменить в моей настройке. Кроме того, параметр force_https, похоже, больше нельзя изменить (я даже не уверен, что он делает):

Мне кажется, что проблема может быть связана с разными сессиями браузера, но я не уверен. Думаю, я уже близко к решению, мне нужен лишь небольшой толчок. Любая информация будет полезна. Спасибо!

Похоже, это именно та проблема. Вы сможете обойти её, отключив настройку сайта discourse_connect_csrf_protection (в исходном тексте было перечёркнуто «включить»). Это скрытая настройка сайта, по умолчанию установленная в значение true. Вам потребуется включить её через консоль Rails.

Она используется в коде здесь:

Если по умолчанию оно установлено в true, я полагаю, вы имеете в виду, что мне следует установить его в false. Я сейчас попробую.

Похоже, это решило проблему. Спасибо за информацию! Я бы, наверное, никогда сам не догадался, lol