我有一个视图,调用一个简单的控制器方法
<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),之后调用该方法再次,它重定向很好。
控制台记录:
开始GET&#34; / login_with_external_app&#34; for :: 1 at 2016-12-03 11:23:11 -0300由SessionsController#login_with_external_app作为HTML处理
重定向到 https://an_app.com/login/oauth/authorize?secret_key=123456&scope=x%3y 完成302发现于2824ms(ActiveRecord:0.0ms)
开始GET&#34; / login_with_external_app&#34; for :: 1 at 2016-12-03 11:23:15 -0300由SessionsController#login_with_external_app作为HTML处理
答案 0 :(得分:0)
也许您可以透露更多信息,但是从这一点来看,您的方法似乎被调用了两次。你没有机会把这种方法放在before_action中,是吗?
答案 1 :(得分:0)
我有同样的问题,发现如果我使用帖子链接而不是它解决了问题。所以在上面的例子中使用:
<p><%= link_to "Log In external app", login_with_external_app_path, method: :post %></p>
然后记得改变路线从get到post。