2013-10-06 18 views
0

我看到,當我們的名字在配置文件的路徑,像這樣:如何有一個路線從代碼只訪問,而不是從URL

match 'controller/posts' => 'controller#posts', :as => 'posts' 

它創建與動作控制器命名路線。

但是這條路線需要從代碼中訪問。說我點擊帖子按鈕時,它應該爲用戶執行此操作。

但是,當某人執行www.xyz.com/posts時,它不應該嘗試執行此操作。那可能嗎 ?

+2

對我來說不是100%清楚你的意思是「這條路線需要從代碼中訪問」?你是否在問如何創建一個控制器,它將*只響應你之前呈現的HTML請求?你的應用程序是否已經有認證和用戶會話? –

回答

1

我不確定你爲什麼會這樣做。這聽起來像你想要的是能夠從另一個控制器調用特定位的代碼。所以一條路線不會因爲你提到的原因而工作(它可以在瀏覽器中使用)。

相反,你應該提取這段代碼並將其放入它自己的庫中。

的lib/foobar.rb:

module Foobar 
    def my_method 
    # add your code here 
    end 
end 

然後你可以從徘徊無論你想在你的代碼中調用它。

1

不,如果有人在瀏覽器中輸入URL而不是點擊鏈接,則無法設置路由並拒絕訪問。

它聽起來像你試圖做的是阻止用戶猜測一個URL。有幾個選項來做到這一點:

  • 需要驗證的URL
  • 使用中這是很難猜測的URL唯一令牌(/職位/ 1122bbbbababab/1)

你可以使用devise進行身份驗證。

要使用令牌,你可以設置像一個路線:

match 'controller/{some unique token here}/posts' => 'controller#posts', :as => 'posts' 

看一看在Rails guide on Routes其他方式來設定的路線上的約束。

+0

其實對於一個POST路由來說,它*有可能進一步發展,例如對請求進行數字簽名,和/或使用一個隨機數,以便只有先前呈現的HTML表單(或其自動化)可以通過一些額外的隱藏領域。這可以用來防止重複請求攻擊。不清楚OP是否會從中受益,還是要求更根本性的安全問題(您的回答地址)。您對獨特令牌的建議非常接近我認爲OP所要求的。 –

+0

關於POST請求和nonce的好處。這可以是URL請求的一部分,通過使用public/private crypto來生成一段有效的簽名令牌(類似於csrf-token rails生成的)。我會用這個更新我的答案。 – roo

相關問題