2011-01-07 11 views
1

フロントエンドでjavascript ajaxリクエストを実行するときにJSONを返す特定のRailsコントローラメソッドがあります。Railsコントローラメソッドへの直接URLアクセスの防止

しかし、ユーザーが直接URLを入力しないようにしたいので、メソッドが返すJSONが表示されます。私はまだ私のAjaxリクエストを実行できるようにしたい。これを簡単にやり遂げるにはどうすればいいですか?ありがとう!!

答えて

3

ちょっと考えて...あなたのrespond_toブロックでhtmlリクエストのカスタムを行うことができます。

respond_to do |format| 
    format.html { ... } # give them a 404 response? 
    format.js { render :json => @obj } 
end 

この名前のhtml.erbテンプレートでは、何らかのアクセス拒否メッセージが表示されることがあります。あなたはrails3コントローラでrespond_toフィルタはかなり甘いです

if request.xhr? 
     ... 
    end 
0

routes.rbには:via =>:postを追加して、URLがPOSTリクエストのみを受け入れるようにすることができます。 http://guides.rubyonrails.org/routing.html

+0

リクエストが最初はGETであった場合、これは良い解決策ですか? – Samo

2

:次に、あなただけのこれを持っていると思います。

YourJsonController < ApplicationController 

    respond_to :json 

    def index 
    #non-json requests will receive a 406 error 
    end 

end 
+0

ちょっと、答えを少し説明できますか?それは実際に何をしますか –

+0

それはシーンの背後にあるリクエストヘッダをチェックします。 – apneadiving

+0

ああ、特定のuser_idだけにアクセス可能な特定のURLを作ることはできますか? (これらのuser_idだけが表示できます)他の人には、このテクニックで「このページを見る権限がありません」というメッセージが表示されます –

2

であなたのアクションをラップすることができ

respond_to do |format| 
    format.html 
    format.js { render :json => @obj } 
end