【问题标题】:Ruby on rails redirect_to to an external url call the method twiceRuby on rails redirect_to 到外部 url 调用该方法两次
【发布时间】:2016-12-03 14:30:30
【问题描述】:

我有一个调用控制器的简单方法的视图

<p><%= link_to "Log In external app", login_with_external_app_path %></p>

控制器会:

  def login_with_external_app
    params = {secret_key: ENV['SECRET_APP_KEY'], scope: 'x:y' }
    uri = URI('https://an_app.com/login/oauth/authorize')
    uri.query = params.to_query
    redirect_to(uri.to_s)
  end

方法 login_with_external_app 被调用两次。第一个是当我单击视图的按钮时,单击该代码段后正确执行并且它没有正确重定向到 uri(控制台向我显示应用程序找到了 URL),然后调用该方法再次,它重定向正常。

控制台日志:

于 2016 年 12 月 3 日 11:23:11 开始为 ::1 获取“/login_with_external_app” -0300 由 SessionsController#login_with_external_app 处理为 HTML

重定向到 https://an_app.com/login/oauth/authorize?secret_key=123456&scope=x%3y Completed 302 Found in 2824ms (ActiveRecord: 0.0ms)

于 2016 年 12 月 3 日 11:23:15 开始为 ::1 获取“/login_with_external_app” -0300 由 SessionsController#login_with_external_app 处理为 HTML

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-5


    【解决方案1】:

    也许您可以透露更多信息,但据此,您的方法似乎被调用了两次。您没有任何机会将该方法放在 before_action 中,是吗?

    【讨论】:

    • 我没有把方法放在回调方法中。
    • 尝试在该方法中使用 binding.pry。使用next 关键字,这样您就可以知道代码运行的确切方式
    • 我做到了,问题似乎出在我调试 gem 的 gem 中,它调用了两次。
    • 不错的发现。如果它是开源的,您可以联系 gem 的作者或贡献它
    • @nachoc 如果您能准确解释问题出在哪里、gem 的名称以及您是如何解决的,那将会非常棒。宝石的名称是什么?
    【解决方案2】:

    我遇到了同样的问题,发现如果我使用帖子链接代替它可以解决问题。所以在上述情况下使用:

    <p><%= link_to "Log In external app", login_with_external_app_path, method: :post %></p>
    

    然后记得将路线从 get 更改为 post。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多