2011-01-07 18 views
1

Ich habe eine bestimmte Rails-Controller-Methode, die einige JSON zurückgibt, wenn ich eine JavaScript-AJAX-Anfrage im Front-End.Direkten URL-Zugriff auf Rails Controller-Methoden verhindern

Ich möchte jedoch verhindern, dass Benutzer die URL direkt eingeben, die den JSON anzeigt, den die Methode zurückgibt. Ich möchte auch noch meine Ajax-Anfragen durchführen können. Wie kann ich das einfach machen? Vielen Dank!!

Antwort

3

Nur ein Gedanke ... Sie könnten etwas Brauch in Ihrem respond_to Block für HTML-Anfragen.

Oder vielleicht Ihre html.erb Vorlage mit diesem Namen könnte nur eine Art von Zugriff verweigert Nachricht anzeigen. Dann würden Sie nur dieses:

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

In Ihrer routes.rb können Sie hinzufügen: via =>: posten, damit Ihre URL nur POST-Anfragen akzeptiert. Siehe "HTTP Verb Constraints" unter http://guides.rubyonrails.org/routing.html

+0

Ist das eine gute Lösung, wenn die Anfrage zunächst ein GET war? – Samo

2

Sie Ihre Aktion wickeln konnte mit

if request.xhr? 
     ... 
    end 
+0

Hey, kannst du ein bisschen von deiner Antwort erklären? was tut es eigentlich –

+0

Es überprüft die Anfrage Header hinter der Szene – apneadiving

+0

oh, kann ich eine bestimmte URL in Schienen nur für bestimmte user_id zugänglich machen? (Nur diese user_id's können anzeigen) sonst eine Nachricht mit der Aufschrift 'no authorized to this page or somehing' mit dieser Technik –

2

Der respond_to Filter in rails3 Controller ist ziemlich süß.

YourJsonController < ApplicationController 

    respond_to :json 

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

end 
Verwandte Themen