已解决:Rails Api无法访问用户身份验证的控制器

时间:2019-03-18 19:32:53

标签: ruby-on-rails devise rails-api

我正在使用devise-jwt 0.5.8jsonapi-resources制作Rails 5.2.2 Api。

这是我的应用程序控制器

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#index。

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  

此后,一切都按预期进行。

0 个答案:

没有答案