我正在使用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调用create
或destroy
时,它会自动将我从应用程序中注销并返回40x Unauthorized错误。有人见过这个吗?有什么想法吗?
这是route.rb
resources :users do
resources :friends, only: [:index, :friended_me, :create, :destroy]
end
例如,这是否需要在devise_scope :users
块内?
答案 0 :(得分:1)
我弄清楚为什么会这样。在ApplicationController
中,如果启用了protect_from_forgery
。 POST/PUT/DELETE
的API调用将检查auth_token
。如果没有提供,它将失败。但是,对于GET
,如果未提供,则在用户登录时仍会继续操作。
修复是在覆盖resource.reset_authentication_token!
后使用SessionsController#create
生成的auth_token