AbstractController :: DoubleRenderError во время вызова API - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь настроить API, который регистрирует пользователя в моем приложении и аутентифицирует пользователя с помощью токена. Для этого я создаю новый сеанс.

Контроллер сеансов

class Api::V1::SessionsController < Api::V1::BaseController

  def create
    user = User.where(email: params[:email]).first
    if user&.valid_password?(params[:password])
      render json: user.as_json(only: [:first_name, :last_name, :email]), status: :created
    else
      head(:unauthorized)
    end
  end

Базовый контроллер

class Api::V1::BaseController < ActionController::API
  include Pundit

  after_action :verify_authorized, except: :index
  after_action :verify_policy_scoped, only: :index

  rescue_from StandardError,                with: :internal_server_error
  rescue_from Pundit::NotAuthorizedError,   with: :user_not_authorized
  rescue_from ActiveRecord::RecordNotFound, with: :not_found

  private

  def internal_server_error(exception)
    if Rails.env.development?
      response = { type: exception.class.to_s, message: exception.message, backtrace: exception.backtrace }
    else
      response = { error: "Internal Server Error" }
    end
    render json: response, status: :internal_server_error
  end

  def user_not_authorized(exception)
    render json: {
      error: "Unauthorized #{exception.policy.class.to_s.underscore.camelize}.#{exception.query}"
    }, status: :unauthorized
  end

  def not_found(exception)
    render json: { error: exception.message }, status: :not_found
  end

end

Когда я тестирую метод, я получаю AbstractController::DoubleRenderError, несмотря напользователь, существующий в базе данных. Он указывает на последнюю строку метода internal_server_error(exception) в BaseController.

Может кто-нибудь помочь мне понять, почему этот код не отображает JSON пользователя, когда пользователь действительно существует в базе данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...