如何skip_before_action for devise_token_auth sessions #create

时间:2017-01-31 02:52:28

标签: ruby-on-rails authentication devise ruby-on-rails-5 rails-api

我有一个Rails 5应用程序(仅限api)。我正在使用devise_token_auth进行身份验证。在应用程序中我有几个控制器,对于所有控制器我想authenticate_user!。我想避免重复行before_action :authenticate_user!,所以我把它放在ApplicationController中。

class ApplicationController < ActionController::API
  include DeviseTokenAuth::Concerns::SetUserByToken
  before_action :authenticate_user!
end

使用这种方法,即使在登录和注册期间也会调用authenticate_user!。如何跳过:authenticate_user!登录,注册和注销?我试图修补SessionsController以添加skip_before_action

module DeviseTokenAuth
  class SessionsController
    skip_before_action :authenticate_user!, only: [:create, :destroy, ]
  end
end

但是控制器是延迟加载的,所以我得到以下错误:

undefined method `skip_before_action' for DeviseTokenAuth::SessionsController:Class

我错过了什么?还有其他方法吗?谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

您的SessionsController类应继承Devise::SessionsController以使用skip_before_action类方法。

module DeviseTokenAuth
  class SessionsController < Devise::SessionsController
    skip_before_action :authenticate_user!, only: [:create, :destroy]
  end
end

答案 1 :(得分:0)

您可以在之后声明

before_action :authenticate_user! 
  
::DeviseTokenAuth::SessionsController.class_eval do
  skip_before_action :authenticate_user!
end