使用AJAX更改CSRF令牌

时间:2013-10-20 04:48:45

标签: ruby-on-rails ajax csrf

所以我使用Devise进行AJAX登录/注销。如果我使用AJAX注销,会话将被重置,而我正坐在陈旧的CSRF令牌上。为了解决这个问题,我想我会在我的注销服务器端代码中生成一个新令牌,将其传递回客户端,并让客户端将其设置在适当的位置。所以我像这样返回JSON:

return render :json => {:success => true,·                                                        
                        :user_registration_path => user_registration_path,                        
                        :csrfToken => form_authenticity_token}

然后我在我的ajax成功处理程序中处理,就像这样:

  logoutAuth: function(e, data, status, xhr) {
    console.log(data);
    console.log(status);
    console.log(data.csrfToken);
    $('.calendar').hide();
    $('.sign-out-button').hide();
    $('.right').append($('<li class="btn log-in-button"><a class="standout" href="#" data-reveal-id="login">Member Log in</a></li>'));
    $('.right').append($('<li class="btn sign-in-button"><a class="standout-primary" href="' + data.user_registration_path +·
                         '" data-reveal-id="sign-up">Member Sign up</a></li>'));
    // reset CSRF token with new token generated after sign out -- to allow AJAX with CSRF protection
    $('meta[name="csrf-token"]').attr('content', data.csrfToken);
  }

这是奇怪的部分:当我看到调用form_authenticity_token的结果在服务器上时,我会得到一些随机生成的大屁股。预期。当我在console.log(data.csrfToken)中,那个哈希应该被映射到什么,我得到了未定义。我的数据对象中的其他变量也是可访问的。此外,我在开发人员工具中看到了XHR响应中的令牌。这是怎么回事?此外,这是重置真实性令牌的首选方式吗?

0 个答案:

没有答案