让Sinatra重定向到顶级而不是iframe

时间:2013-10-22 23:24:11

标签: ruby oauth-2.0 sinatra

我在orame中使用oauth2。在app.rb中的redirect_uri方法中,我正在重定向到'/'。但是,这会导致我的“/”页面显示在iframe中,而不是顶层。我可以在我的ruby代码中修复此问题吗?或者,我是否需要更改我的HTML或Javascript?

在我的HTML中,我有:            

<form action="https://XXX.XXXX.com/XXX/authorize" method="get" id="XXXForm" target="XXX">
    <input type="hidden" name="client_id" value="my_id"/>
   <input type="hidden" name="redirect_uri" value="https://somesite.com/redirect/XXX/"/>
</form>

并且,在HTML文件的末尾:

<script type="text/javascript">
 $('#XXX').show();
 $('#XXXForm').submit();
</script>

而且,在我的app.rb中,我有:

get '/redirect/XXX/' do
  redirect_to_url = '/login'
  if params[:code] then # authorized okay
    # other processing, e.g., get token
    redirect_to_url = '/'
  end
  p "redirect #{redirect_to_url}"
  redirect to redirect_to_url
end

1 个答案:

答案 0 :(得分:0)

看看https://stackoverflow.com/a/168488/335847,看看是否有帮助。

如果您要使用javascript,那么我会:

  • 使其成为ajax调用
  • 不要理会Sinatra中的重定向
  • 只返回请求的状态(one of the 2xx's for success or the 4xx or 5xx's for failure
  • 请记住使用halt以便不返回正文(除非您愿意,但仍然可以使用halt
  • 如果您需要,请使用request.xhr?
  • 使用成功处理程序(或类似工具)来重定向页面,可能是使用全局window