2012-03-28 21 views
6

私は:remote => trueを持つフォームを持っています。これはajaxを通して送信されることを意味します。コントローラでdeviseのauthenticate_userを処理する方法! ajaxコールで?

、私はそのようなコードを持っている:私は唯一の確認、ユーザーがリソースを作成できるようにするために

before_filter: authenticate_user!, :only => [:create] 

を。認証が失敗したときに

しかし、

Completed 401 Unauthorized 

を引き上げる工夫と全く控えめなJavascriptをレンダリングされません。

しかし、私は物事を願っていますが、このように書き:フラッシュにいくつかのメッセージを設定して、私の.js.erbをレンダリング

工夫、そして私は、ユーザーへのフラッシュを示しました。

どのように達成するには?

+0

JS私は信じることができない...しかし、私は工夫の2.0.0.rcで現在同じ問題を持っている...私だけあなたの質問に私が実際にセッションコントローラを作成するアクションを変更したくないことを追加してください...また、authenticate_userを上書きしてください!ばかばかしいと思われる...ナビゲーション形式の変更(追加:js、:json)は私のためには機能しません –

答えて

3

独自のauthenticate_userを実行する必要があります。あなたはあなたが望む行動を取ることができます。

def authenticate_user! 
    unless current_user 
    render 'my_js' 
    end 
end 
10

これはかなり面白いですが、偽

config.http_authenticatable_on_xhr = false 

にdevise.rb http_authenticatable_on_xhrの変化が私のためにトリックをした... authenticate_userを上書きせずに!方法

注:私も追加しました:ナビゲーション形式へ

config.navigational_formats = [:"*/*", "*/*", :html, :js] 
+0

これはロジックです... trueに設定されたフラグでajaxリクエストは401のヘッダーのみを返しますjson呼び出しのインスタンスは便利です。本当のボディレスポンスが必要なときは、このフラグをfalseに設定する必要があります –

+1

はい、動作します!しかし、私はまだ問題があります。認証が失敗すると、deviseはユーザー/ sign_in.jsをレンダリングします。どのように変更するのですか?私は自分のjsファイルをレンダリングしたいと思っています。必ずしもpublic/users /フォルダにある必要はありません。 – HanXu

+0

私は確かにユーザー/ sign_in.js.erbはあなたが言及したpublic/usersフォルダの下にあるべきではないと確信していますが、app/views/users/sign_in.js.erb(またはあなたがdeviseに何でも教えてください)の中に - authenticate_userを上書きしないと、発信者以外の見解が得られないことは恐れられます。 –

関連する問題