2016-12-03 47 views
0

我有呼叫控制器的簡單方法Ruby on Rails的redirect_to的外部URL調用該方法兩次

<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),然後調用該方法再次,它重新導向罰款。

控制檯日誌:

發起者SessionsController#login_with_external_app GET 「/ login_with_external_app」 爲:: 1在2016年12月3日11點23分11秒 -0300處理作爲HTML

重定向到 https://an_app.com/login/oauth/authorize?secret_key=123456&scope=x%3y 完成302發現在2824ms(ActiveRecord的:0.0ms)

發起者GET 「/ login_with_external_app」 爲:: 1在2016年12月3日十一點23分15秒 -0300處理SessionsController#login_with_external_app作爲HTML

回答

0

也許你可以透露更多的信息,但從這看來,你的方法似乎被調用兩次。你沒有把這種方法放在before_action中,是嗎?

+0

我沒有把方法放在回調方法中。 –

+0

嘗試在該方法中使用binding.pry。使用'next'關鍵字,以便您可以知道代碼正在運行的確切方式 –

+0

我做到了,問題似乎出現在gem中,我調試了gem,並且調用了兩次。 –

0

我有同樣的問題,並發現,如果我使用後鏈接,而不是它解決了這個問題。所以在上面的情況下使用:

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

然後記得要更改路線從get到post。