Discourse에 로그인한 후 원격 사이트로 로그인하기 위해 외부 URL을 호출하려고 합니다. 제가 해야 할 일은 원격 사이트의 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)
# 페이로드 생성을 위해 작업 수행
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
수정: 개발자들이 제가 사용하는 것과 똑같이 redirect_to를 사용하는 Rails 앱을 공유했고, 그들은 그것이 작동한다고 주장합니다. Discourse에는 redirect_to가 . . . Ember 내부에 있기 때문에 다르게 동작하게 만드는 무언가가 있는 걸까요?
