Решено: Rails Api не может получить доступ к аутентифицированным контроллерам пользователя - PullRequest
0 голосов
/ 18 марта 2019

Я делаю 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

Мои маршруты и структура папок

Folder Structure

Мои запросы работают, как и ожидалось, когда я не аутентифицирую контроллеры, как это

class Api::V1::MatchesController < ApplicationController
  # before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy]
end

Matches

Чтобы аутентифицировать контроллер, сначала я вхожу в систему и получаю следующее ...

Sign In

Затем я добавляю токен авторизации, необходимый для заголовка, в качестве авторизации канала-носителя и делаю запрос на индекс # groups, который требует аутентификации пользователя.

class Api::V1::GroupsController < ApplicationController
  before_action :authenticate_user!, only: [:index, :new, :create, :edit, :update, :destroy]
end

Я получил этот ответ.

groups

ОБНОВЛЕНИЕ Я совершил глупую ошибку ...

Проблема заключалась в том, что я не следовал правильной настройке и смешал две стратегии отзыва. В частности, я включил стратегию JTIMatcher в пользовательскую модель, пытаясь использовать стратегию черного списка. Просто убедитесь, что вы реализуете стратегию, которую вы хотите правильно. Следуйте инструкциям на странице devise_jwt github. Я закончил тем, что использовал стратегию отзыва белого списка. Я добавил include Devise::JWT::RevocationStrategies::Whitelist в мою модель пользователя, а также

devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :jwt_authenticatable, jwt_revocation_strategy: self  

После этого все заработало как положено.

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