Я пытаюсь настроить 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 пользователя, когда пользователь действительно существует в базе данных?