Я пытаюсь вызвать внешний URL для входа на удаленный сайт после того, как пользователи вошли в Discourse. Всё, что мне нужно сделать, — это перенаправить на URL на удаленном сайте, который выполнит вход там, а затем перенаправит обратно в Discourse. Когда я делаю это, браузер отказывается выполнять перенаправление из-за CORS:
Access to XMLHttpRequest at 'https://SITE/api/sso/v2/sso/jwt?' (redirected from 'https://testing.literatehosting.com/session') from origin 'https://testing.literatehosting.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Разработчики приложения говорят, что проблема в том, что я делаю перенаправление неправильно (например, через ajax-запрос?), но это выглядит так же, как, например, то, что я вижу в коммитах, упомянутых здесь.
Я снова (как всегда) в тупике.
Не могу понять, просто ли я глуп, или им действительно нужно отправлять заголовки Access-Control-Allow-Origin (и если это так, то это не должно работать ни для одного из их клиентов? что кажется маловероятным).
Вот мой код:
after_initialize do
class ::SessionController
def login(user)
puts "\n\n\n\LOGIN happening!\n\n\n\n"
session.delete(ACTIVATE_USER_KEY)
log_on_user(user)
if payload = cookies.delete(:sso_payload)
sso_provider(payload)
else
if true # плагин включен и имеет api-ключ и url
sign_into_thinkific(user)
else
render_serialized(user, UserSerializer)
end
end
end
def sign_into_thinkific(user)
# выполнить действия для генерации payload
redirect_to thinkific_sso_url(payload) # также пробовал redirect_to
generate_url(thinkific_sso_url(payload))
end
def generate_url(url, params = {})
puts "\n\n\nGenerate URL: #{url}\n\n\n"
uri = URI(url)
uri.query = params.to_query
uri.to_s
end
def thinkific_sso_url(payload)
current_url="https://#{GlobalSetting.hostname}/"
url = "https://#{SiteSetting.thinkific_site_url}/api/sso/v2/sso/jwt?jwt=#{payload}"
url += "&return_to=#{URI.escape(current_url)}"
url
end
end
end
РЕДАКТИРОВАНИЕ: Разработчики поделились Rails-приложением, которое использует redirect_to точно так же, как и я, и утверждают, что это работает. Есть ли что-то особенное в Discourse, из-за чего redirect_to ведёт себя иначе, потому что он находится… внутри Ember или что-то в этом роде?
