【问题标题】:Strange redirecting with koala gem使用考拉宝石进行奇怪的重定向
【发布时间】:2012-08-27 18:57:32
【问题描述】:

我正在使用 ruby​​、sinatra 和 koala gem 为 facebook 创建一个应用程序。 当我重定向到 /auth/facebook 时,它会执行所需的操作,但是它首先会重定向到带有此矩形的页面,然后转到身份验证对话框。我认为这对最终用户来说非常难看。如何删除这个奇怪的重定向? 代码:

#This function defines a get and post route with the same parameters.
def get_or_post(path, opts={}, &block)
  get(path, opts, &block)
  post(path, opts, &block)
end

get "/auth/facebook/?" do
  redirect authenticator.url_for_oauth_code(:permissions => FACEBOOK_SCOPE)
end

get_or_post '/auth/facebook/callback/?' do
  session[:access_token] = authenticator.get_access_token(params[:code])
  update_user()
  redirect '/'
end

【问题讨论】:

    标签: ruby facebook sinatra koala


    【解决方案1】:

    我猜你是在画布 iframe 内进行重定向?这当然会尝试在该 iframe 中显示身份验证对话框,而身份验证对话框确实不希望显示在任何类型的 (i) 框架中。

    所以不要使用重定向(不能指定目标),而是使用 JavaScript 来“重定向”——让你的脚本输出一个小的 HTML 文档,基本上只包含一行 JavaScript,使用

    top.location.href = '{auth dialog URL goes here}';
    

    在当前浏览器窗口的顶部框架加载一个新的 URL。

    【讨论】:

    • 有趣。在某些地方,我正在使用服务器端身份验证流程。这意味着我正在从服务器端代码重定向到我的身份验证 URL。为了避免这个问题,我必须使用客户端(JS)身份验证流程,对吗?
    • 不,不一定——您只需要确保服务器端身份验证对话框不会在任何 (i) 框架内被调用,而是在顶部窗口实例中调用。
    • 这是真的,但由于我正在制作一个 facebook 应用程序,服务器端的东西将总是在 iframe 内被调用。
    • 是的,但正如我所说,您可以使用 JavaScript 而不是 HTTP 重定向,以使目标 URL 显示在正确的窗口中;但这样做不会使您的整个 Auth 流程成为客户端流程——它仍然是 服务器端 Auth 流程,并且 JS 仅用于使其在正确的位置发生。
    • 是的,有道理。我将制作一个 oneliner html 模板,并将 Koala Gem 中的重定向 url 传递给它。轻松解决,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多