1

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

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

我得到了 index 操作来使用 authenticated_user!。在这种情况下,如果用户通过了身份验证,index 将返回带有 200 状态码的数据。如果用户未通过身份验证,则index返回Unauthorized40x 状态代码。

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

这是路线.rb

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

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

4

1 回答 1

1

我弄清楚为什么会这样。在ApplicationController,如果protect_from_forgery启用。API 调用POST/PUT/DELETE将检查auth_token. 如果不提供,它将失败。但是,对于GET,如果未提供,则如果用户已登录,该操作仍将继续。

解决方法是使用resource.reset_authentication_token!覆盖后生成的 auth_tokenSessionsController#create

于 2012-06-14T22:31:51.830 回答