Цепочка фильтров остановлена ​​как: authenticate_user отрендерено или перенаправлено - PullRequest
0 голосов
/ 28 апреля 2018

Эта ошибка неожиданно началась на производственном сервере. На локальном все отлично работает.

Я использую собственную архитектуру на основе токенов аутентификации. 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 голосов
/ 02 мая 2018

Я нашел проблему, проблема была в кеше и обработке куки на сервере. Отредактировал его в CloudFront, который снова может перехватывать заголовки запросов

0 голосов
/ 28 апреля 2018

Не уверен, но, возможно, попробуйте это

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...