フロントエンドでjavascript ajaxリクエストを実行するときにJSONを返す特定のRailsコントローラメソッドがあります。Railsコントローラメソッドへの直接URLアクセスの防止
しかし、ユーザーが直接URLを入力しないようにしたいので、メソッドが返すJSONが表示されます。私はまだ私のAjaxリクエストを実行できるようにしたい。これを簡単にやり遂げるにはどうすればいいですか?ありがとう!!
フロントエンドでjavascript ajaxリクエストを実行するときにJSONを返す特定のRailsコントローラメソッドがあります。Railsコントローラメソッドへの直接URLアクセスの防止
しかし、ユーザーが直接URLを入力しないようにしたいので、メソッドが返すJSONが表示されます。私はまだ私のAjaxリクエストを実行できるようにしたい。これを簡単にやり遂げるにはどうすればいいですか?ありがとう!!
ちょっと考えて...あなたの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
routes.rb
には:via =>:postを追加して、URLがPOSTリクエストのみを受け入れるようにすることができます。 http://guides.rubyonrails.org/routing.html
:次に、あなただけのこれを持っていると思います。
YourJsonController < ApplicationController
respond_to :json
def index
#non-json requests will receive a 406 error
end
end
ちょっと、答えを少し説明できますか?それは実際に何をしますか –
それはシーンの背後にあるリクエストヘッダをチェックします。 – apneadiving
ああ、特定のuser_idだけにアクセス可能な特定のURLを作ることはできますか? (これらのuser_idだけが表示できます)他の人には、このテクニックで「このページを見る権限がありません」というメッセージが表示されます –
であなたのアクションをラップすることができ
respond_to do |format|
format.html
format.js { render :json => @obj }
end
リクエストが最初はGETであった場合、これは良い解決策ですか? – Samo