2016-09-29 6 views
0

を呼び出すことができ:それはページそのもので実行する必要がありauthenticate_adminRailsはページにadminを認証 - しかし、jQueryのは、私はLanguagesControllerにプライベートメソッドを追加したい

は唯一の方法はありますが、jQueryの呼び出しが行われた場合そのコントローラーに許可されていますか?

今私は

before_action :authenticate_admin 


private 
def authenticate_admin 
     if current_user.role_id != 1 
     redirect_to home_path 
     end 
end 

を持っていますが、サインアップし、ユーザーのダッシュボード上の言語のドロップダウンリストがあります。だから、プロファイルでは、そこJS:

var getLanguages = $.get('/languages.json', function(languages){ 
     lang = languages 
     var langConfirmSource = $('#language-confirmation-template').html(); 
     var langConfirmCompiled = Handlebars.compile(langConfirmSource); 
     var langConfirmTemplate = langConfirmCompiled(languages) 
     $('body').append(langConfirmTemplate) 
    }); 

それが唯一のページに管理者を保護しますが、呼び出されたときにjQueryは、それがことだやらせるように設定する正しい方法は何ですか?

答えて

1

あなたはページがあり、レールアプリケーションによってレンダリングされ、JavaScriptコードがそのページにあると仮定します。このページは認証されており、ajaxリクエストをパブリックにアクセスできるようにしたいとします。

それが正しい場合、あなたは特定の要求が入ってきたときに、あなたの認証をスキップすることがありますが

ですから、新しいルートを作成することができ、あなたのコントローラメソッドにマッピングし、そのメソッドのskip_authenticate_adminを持つ:。

class LanguagesController < ApplicationController 
    skip_before_action : authenticate_admin, only: [:languages_whatever] 

    def languages_whatever 
    render json: data 
    end 
end 

それは役に立ちますか?

+0

私はコントローラーを呼び出すことができますが、問題は関連するページが必要であり、そのページにすべてのユーザーがアクセスできることです。私は、もし誰かが/言語に行き、管理者ではないと言う別の方法があるのだろうかと疑問に思っています。たとえそれが許可されていても、それは何ですか? – gwalshington

+0

あなたはページを持っている必要はなく、例えばJSONオブジェクトでも反応することを知っていますか?これはAPIを作成するのに便利です。あなたのリクエストは、 'view'またはJSONオブジェクトを返すことができます。 あなたが望むものは可能です。ユーザーをテストし、管理者でない場合はJSONを返すだけです。そうするために、before_action:authenticate_adminを削除してコントローラコールでテストすることができます(他の方法も考えられますが、これはもっと単純です)。しかし、それは推奨されていませんので、特定のルートを作成することを検討してください。 –

関連する問題