Я делаю Rails 5.2.2 Api с devise-jwt 0.5.8
и jsonapi-resources
.
Это мой контроллер приложений
class ApplicationController < ActionController::API
include JSONAPI::ActsAsResourceController
before_action :configure_permitted_parameters, if: :devise_controller?
def render_resource(resource)
if resource.errors.empty?
render json: resource
else
validation_error(resource)
end
end
def validation_error(resource)
render json: {
errors: [
{
status: '400',
title: 'Bad Request',
detail: resource.errors,
code: '100'
}
]
}, status: :bad_request
end
protected
def configure_permitted_parameters
attributes = [:name, :last_name, :username, :email]
devise_parameter_sanitizer.permit(:sign_up, keys: attributes)
devise_parameter_sanitizer.permit(:account_update, keys: attributes)
end
end
Мои маршруты и структура папок
Мои запросы работают, как и ожидалось, когда я не аутентифицирую контроллеры, как это
class Api::V1::MatchesController < ApplicationController
# before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy]
end
Чтобы аутентифицировать контроллер, сначала я вхожу в систему и получаю следующее ...
Затем я добавляю токен авторизации, необходимый для заголовка, в качестве авторизации канала-носителя и делаю запрос на индекс # groups, который требует аутентификации пользователя.
class Api::V1::GroupsController < ApplicationController
before_action :authenticate_user!, only: [:index, :new, :create, :edit, :update, :destroy]
end
Я получил этот ответ.
ОБНОВЛЕНИЕ Я совершил глупую ошибку ...
Проблема заключалась в том, что я не следовал правильной настройке и смешал две стратегии отзыва. В частности, я включил стратегию JTIMatcher в пользовательскую модель, пытаясь использовать стратегию черного списка. Просто убедитесь, что вы реализуете стратегию, которую вы хотите правильно. Следуйте инструкциям на странице devise_jwt github. Я закончил тем, что использовал стратегию отзыва белого списка. Я добавил include Devise::JWT::RevocationStrategies::Whitelist
в мою модель пользователя, а также
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable,
:jwt_authenticatable, jwt_revocation_strategy: self
После этого все заработало как положено.