设计authenticate_user! POST / DELETE REST调用失败

时间:2012-06-14 02:25:33

标签: ruby-on-rails-3 devise

我正在使用Devise通过标准实现来验证用户身份。用户登录后,他/她可以调用使用相同控制器的REST API(因此也称为Devise)。控制器如下所示:

class FriendController < ApplicationController
  before_filter :authenticate_user!
  def create
    ...
  end
  def destroy
    ...
  end
  def index
    ...
  end
end

我得到了使用authenticated_user的索引操作!在这种情况下,如果用户通过身份验证,索引将返回200状态代码的数据。如果用户未经过身份验证,则index会返回Unauthorized,其中包含40x状态码。

但是,当我通过POST和DELETE调用createdestroy时,它会自动将我从应用程序中注销并返回40x Unauthorized错误。有人见过这个吗?有什么想法吗?

这是route.rb

  resources :users do
    resources :friends, only: [:index, :friended_me, :create, :destroy]
  end

例如,这是否需要在devise_scope :users块内?

1 个答案:

答案 0 :(得分:1)

我弄清楚为什么会这样。在ApplicationController中,如果启用了protect_from_forgeryPOST/PUT/DELETE的API调用将检查auth_token。如果没有提供,它将失败。但是,对于GET,如果未提供,则在用户登录时仍会继续操作。

修复是在覆盖resource.reset_authentication_token!后使用SessionsController#create生成的auth_token