过滤器链停止为:authenticate_user呈现或重定向

时间:2018-04-28 06:49:57

标签: ruby-on-rails ruby authentication

生产服务器上突然启动此错误。 当地的一切都很好。

我正在使用自己的基于身份验证令牌的架构。 authenticate_user是检查当前用户是否经过身份验证的函数。

I, [2018-04-28T07:20:53.095743 #1063]  INFO -- : [af1e0a7c-41c9-4082-965a- 
3327aae9fd99] Processing by Api::V1::AnalysisController#analysis as JSON
I, [2018-04-28T07:20:53.095838 #1063]  INFO -- : [af1e0a7c-41c9-4082-965a- 
3327aae9fd99]   Parameters: {"customer_id"=>""}
I, [2018-04-28T07:20:53.098717 #1063]  INFO -- : [af1e0a7c-41c9-4082-965a- 
3327aae9fd99] [active_model_serializers] Rendered 
ActiveModel::Serializer::Null with Hash (0.18ms)
I, [2018-04-28T07:20:53.098997 #1063]  INFO -- : [af1e0a7c-41c9-4082-965a- 
3327aae9fd99] Filter chain halted as :authenticate_user rendered or 
redirected
I, [2018-04-28T07:20:53.099120 #1063]  INFO -- : [af1e0a7c-41c9-4082-965a- 
3327aae9fd99] Completed 401 Unauthorized in 3ms (Views: 2.8ms)

它正在运行我运行的差异服务器。 两者之间的唯一区别是1.我使用自定义异常来处理错误。并从控制器救出它们。 2. Authenitcate_user方法直接呈现而不会引发任何异常。 3.以前在某些方法之前调用了authenitcate_user。现在不仅有这个领域了。

可验证模块:

def authenticate_user
    if current_user
      true
    else
      render json: 'some error', status: 404
    end
end
def current_user
    @user = User.find_by(auth_token: request.headers['Authorization']) if request.headers['Authorization'].present?
    @user if @user && @user.token_expiry > Time.now
end

控制器:

class Api::V1::AnalysisController < ApplicationController

include Authenticable

before_action :authenticate_user

2 个答案:

答案 0 :(得分:0)

不确定,但也许可以试试这个

def authenticate_user
  if current_user
     render json: 'success', status: 200
  else
    render json: 'error', status: 404
  end
end

def current_user
  return unless @user = User.find_by(auth_token: request.headers['Authorization'])
  @user if @user.token_expiry > Time.now
end

答案 1 :(得分:0)

我发现了这个问题, 问题出在服务器的缓存和cookie处理中。 在CloudFront中编辑它,能够再次捕获请求标头。