Rails动作踢了我,但只在ajax请求

时间:2012-06-21 17:19:05

标签: ruby-on-rails ajax security

我有以下操作appointments_for_week

class StylistsController < ApplicationController

  def appointments_for_week
    stylist = Stylist.find(params[:id])
    date = Time.zone.parse(params[:date])
    appointments = stylist.salon.appointments_flat(stylist.id,
                                                   (date + 1.day).beginning_of_week.advance(:days => -1),
                                                   (date + 1.day).end_of_week.advance(:days => -1) + 1.day)
    respond_to do |format|
      format.json { render :json => @appointments }
    end 
  end 

发生了一些非常奇怪的事情。如果我登录然后只是浏览到此操作的路线,则没有任何反应。我得到一个空白页面,这是我所期望的。如果我然后去另一个页面刷新,我仍然登录,这当然是我所期待的。

但是,如果我通过ajax对此操作提出请求,它会把我踢出去。我发现这非常奇怪。如果我添加before_filter以跳过身份验证,我不会被踢出去,但我当然不想跳过身份验证。我不明白为什么可以通过常规请求访问此操作,但不能访问ajax请求。

这里可能会发生什么?

(我在Rails 3.2.1上,如果重要的话。)

1 个答案:

答案 0 :(得分:0)

好吧,在我花了很长时间把我的问题放在一起两秒后,我想通了。

ajax请求是POST。切换到GET使其正常工作。

有趣的是,它之前是POST并且完全相同的JavaScript工作。我改变的唯一一件事就是我更新了我的jQuery版本,所以我猜它肯定与它有关。