Ich versuche, eine externe URL aufzurufen, um sich auf einer Remote-Site einzuloggen, nachdem sich Benutzer bei Discourse eingeloggt haben. Alles, was ich tun muss, ist eine Weiterleitung zu einer URL auf der Remote-Site durchzuführen, die dort die Anmeldung vornimmt und dann zurück zu Discourse weiterleitet. Wenn ich das tue, weigert sich der Browser, aufgrund von CORS weiterzuleiten:
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.
Entwickler der App sagen, dass es daran liegt, dass ich die Weiterleitung falsch durchführe (z. B. mit einem Ajax-Aufruf?), aber das sieht genauso aus wie das, was ich in Commits sehe, die hier erwähnt werden.
Ich bin (wieder einmal) ratlos.
Ich kann nicht sagen, ob ich einfach dumm bin oder ob sie Access-Control-Allow-Origin-Header senden müssen (und falls ja, dann kann das für keinen ihrer Kunden funktionieren? Das scheint weit hergeholt).
Hier ist mein Code:
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 # plugin is enabled and has api key and url
sign_into_thinkific(user)
else
render_serialized(user, UserSerializer)
end
end
end
def sign_into_thinkific(user)
# do stuff to generate payload
redirect_to thinkific_sso_url(payload) # also tried 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
EDIT: Die Entwickler haben eine Rails-App geteilt, die redirect_to genau so verwendet wie ich, und sie behaupten, dass es funktioniert. Gibt es etwas bei Discourse, das bewirkt, dass redirect_to anders behandelt wird, weil es … innerhalb von Ember ist oder so etwas?