2011-09-12 9 views
7

使用要求ヘッダに含まれていてもAjaxのポストにCURRENT_USERを設定しませんajax、Deviseはcurrent_donorを設定していません。考案正しいX-CSRFトークンが

マイリクエストヘッダは次のようになります。関連するコントローラのアクション内で

Host localhost:3000 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:6.0) Gecko/20100101  Firefox/6.0 
Accept */* 
Accept-Language en-us,en;q=0.5 
Accept-Encoding gzip, deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Connection keep-alive 
Content-Type application/x-www-form-urlencoded; charset=UTF-8 
X-Requested-With XMLHttpRequest 
x-csrf-token UFhqJrlOA1c1sAPeUTtV/ABcq5IeqkfA842ORcIWwks= 

、セッション値を見て、私は次を見つける:

{"_csrf_token"=>"UFhqJrlOA1c1sAPeUTtV/ABcq5IeqkfA842ORcIWwks=", "warden.user.donor.key"=>["Donor", [485], "$2a$10$OtkItrzVhN4Ussnqy5k1Au"], "session_id"=>"e6693e22275385a58e0915538791ea49"} 

これはcsrf_tokenことを私に示しているでしょう期待値と一致します。それでも、current_donorはnilのままです。

私はこれに関するいくつかの記事を読んできましたが、実際には、最初にcsrf_meta_tagメソッドが私のレイアウトになく、csrfトークンが設定されていませんでした。

しかし、これはもはやケースではなく、csrfトークンが設定されていますが、まだcurrent_donor値は取得されていません。

私はajax get要求を作成すると、current_donorが正しく設定されています。

あなたが他に見なければならないアドバイスは、非常に高く評価されます。

ベスト、 トム

+1

私はまったく同じ問題を抱えています。あなたはそれを最終的に解決しましたか? – anders

+0

同じ問題、Rails 4.1.6とDevise 3.4.1。どんな解決策ですか? – Frexuz

答えて

9

私は前に同じ問題を抱えていました。私は以下のようにcsrf_tokenを含めることで解決しました

$.ajax({ 
    type: "GET", 
    url: url, 
    data: params , 
    beforeSend: function(jqXHR, settings) { 
     jqXHR.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); 
    }, 
    error: function(){ 
     alert("An error ocurred"); 
    }, 
    success: function(){ 

    } 
}); 
関連する問題