Ajax POST似乎无法通过Devise进行身份验证

时间:2015-02-28 18:51:32

标签: ruby-on-rails ajax devise

发送ajax POST请求时,Devise拒绝对我进行身份验证 我错过了什么?


  • rails(4.1.6)
  • 设计(3.4.1)
  • jquery-rails(2.3.0)
  • jquery-ui-rails(5.0.3)

控制器

class SeenEpisodesController < ApplicationController

  before_filter :authenticate_user! #Devise

  def mark_episode
    #do stuff
    respond_to do |format|
      format.js
    end
  end

end

的Javascript
尝试设置标头和有效负载。

$.ajax({
  type: "POST",
  url: url,
  dataType: "script",
  data: {
    authenticity_token: encodeURIComponent($('meta[name="csrf-token"]').attr('content'))
  },
  beforeSend: function(xhr) {
    xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
  }
});

我也尝试过不自行设置令牌。 jquery_ujs为我设置标题!

是的,我的布局中有<%= csrf_meta_tags %>


Javascript清单

//= require jquery
//= require jquery_ujs #Have tried with or without

Rails控制台输出

Processing by SeenEpisodesController#mark_episode as JS
  Parameters: {"mark"=>"1", "episode_id"=>"887795", "season_id"=>"65577"}
Completed 401 Unauthorized in 9ms


Started GET "/account/sign_in.js" for 192.168.0.10 at 2015-02-28 19:44:18 +0100
Processing by Devise::SessionsController#new as JS

开发工具网络输出

POST

Response


POST parameters

2 个答案:

答案 0 :(得分:0)

%253D - 尝试解码authenticity_token的这一部分。它将等于=。所以,似乎你错误地编码authenticity_token(两次)。

答案 1 :(得分:0)

使用jQuery发布时,您不需要encodeURIComponent。无论如何,jQuery会为您编码数据,这会导致您的数据被编码两次,这将导致提交无效的真实性令牌。