2

我使用 Rails 作为移动应用程序的后端。我尝试包含 Api 的版本。我使用设计进行身份验证,现在使用 authenticate_user!方法不起作用,它向我显示错误

NoMethodError (undefined method `authenticate_user!' for
#<Api::V1::CategoryController:0x00000103b95088>)

我不知道我在哪里做错了。请帮我解决这个问题。任何帮助表示赞赏。

更新:

module Api
    module V1
class CategoryController < ApplicationController
    before_filter :authenticate_user!
4

2 回答 2

3

在对我的 API 进行版本控制后,我遇到了同样的问题。看来 Devise,在添加命名空间后,Devise 更改了authenticate_user!验证_api_v1_user的方法还有current_usercurrent_api_v1_user。如果你像这样命名空间,就会发生这种情况:

namespace :api do
  namespace :v1 do
    devise_for :users do
      resources :sessions, defaults: {format: :json}
   end
  end
end

为了解决这个问题,您必须先定义 devise_for,然后再命名空间。这样您就可以访问 authenticate_user 和 current_user。

devise_for :users, :controllers => { :sessions => "api/v1/sessions" }
devise_scope :user do
  namespace :api do
    namespace :v1 do
      resources :sessions, defaults: {format: :json}
    end
  end
end
resources :users

我希望它有帮助!

于 2015-07-15T17:47:10.643 回答
0

我认为,authenticate_user!添加到ApplicationController.

如果您的 Api 控制器继承自另一个控制器(不是ApplicationController),您需要手动将此助手包含到您的 Api 控制器中。

于 2013-09-13T10:21:08.837 回答