devise_token_auth - 是否可以authenticate_user!没有失败的过滤链?

时间:2015-08-24 07:45:03

标签: ruby-on-rails devise token

我有一个API,需要根据是否有登录用户返回结果。我在rails端使用devise_token_auth,在客户端使用ng_token_auth(Angular)。

在我的控制器中,我想做类似以下的事情:

  1. 尝试authenticate_user,但如果身份验证失败,请不要使过滤器链失败。
  2. 在创建响应有效内容时使用current_user(current_user将包含nil或经过身份验证的用户)。
  3. 以此代码为例:

    class Api::MyController < Api::ApiController
      before_filter :authenticate_user!
    
      def index
        if current_user
          # Create the result json using current_user
        else
          # Create the result json without user data
        end
    
        render json: result
      end
    end
    

    只有经过身份验证的用户才能通过authenticate_user!调用并获取索引方法。 我希望所有用户都可以访问,包括经过身份验证和未经过身份验证的用户。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下操作(未经测试,因为我目前没有安装Rails)。

skip_before_filter :authenticate_user!, only: [:index_auth_failed]

before_filter do
  authenticate_user! rescue redirect_to index_auth_failed
end

def index
   # current_user exists
end

def index_auth_failed
   # current_user does not exist
end