我使用rails作为移动应用的后端。我试过包含Api的版本。我使用devise进行身份验证,现在使用authenticate_user!方法不起作用,它显示错误
NoMethodError (undefined method `authenticate_user!' for
#<Api::V1::CategoryController:0x00000103b95088>)
我不知道我在哪里做错了。请帮我解决这个问题。任何帮助表示赞赏。
更新
module Api
module V1
class CategoryController < ApplicationController
before_filter :authenticate_user!
答案 0 :(得分:2)
我的API版本化后遇到了同样的问题。在添加名称空间后,Devise似乎将 authenticate_user!方法更改为 authenticate_api_v1_user!,并将 current_user 更改为 current_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
我希望它有所帮助!
答案 1 :(得分:0)
我认为,authenticate_user!
已加入ApplicationController
。
如果你的Api控制器继承自另一个控制器(不是ApplicationController
),你需要手动将这个助手包括在你的Api控制器中。