我正在使用devise-jwt 0.5.8
和jsonapi-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
我的路线和文件夹结构
当我不像这样对控制器进行身份验证时,我的请求可以正常工作
class Api::V1::MatchesController < ApplicationController
# before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy]
end
要对控制器进行身份验证,首先我登录并获得以下信息...
然后我将所需的授权令牌添加为标头,作为承载授权,并请求需要用户身份验证的groups#index。
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
此后,一切都按预期进行。