的authenticate_user!在Api版本化rails之后,该方法无法正常工作

时间:2013-09-13 10:11:34

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 devise rails-api

我使用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!

2 个答案:

答案 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控制器中。