ruby-on-rails - 在删除用户时设计令牌身份验证跳过更新身份验证标头
问题描述
我在我的 Rails 应用程序中同时使用 devise_token_auth 1.1.3 和 devise 4.4.3,我正在尝试删除当前用户。我的用户被称为“员工”。问题是当我尝试删除当前用户时,它会尝试为不存在的用户更新 auth 标头。
def destroy
staff = Staff.find(params[:id])
if current_staff.entity == staff.entity
staff.destroy
render json: { success: "Staff Member Successfully Deleted" }, status: 200
else
render json: { success: "Staff Member failed to delete" }, status: :unprocessable_entity
end
end
在该渲染 json 行中,它在 devise_token_auth 中命中该行并崩溃;
devise_token_auth (1.1.3) app/controllers/devise_token_auth/concerns/set_user_by_token.rb:105:in `update_auth_header'
更新:尝试使用注册控制器删除用户
我已经设置了当前路线覆盖
mount_devise_token_auth_for 'Staff', at: 'auth', controllers: {
sessions: 'sessions',
registrations: 'registrations'
}
并像这样覆盖注册控制器;
class RegistrationsController < DeviseTokenAuth::RegistrationsController
def destroy
puts 'test'
byebug
end
end
现在在我的测试中,如果我打电话
delete "/auth/#{staff.id}"
它根本没有击中byebug。
解决方案
这样做的方法是在控制器顶部添加以下代码行:
skip_after_action :update_auth_header, only: %i[destroy]
这样做是在设计中为“销毁”方法定义的操作之后跳过 update_auth_header。
推荐阅读
- html - devtools 中的 position-bottom 是什么意思?
- excel - 在 Excel 中反转空单元格和非空单元格 - VBA
- django - Django 设计功能来检查无效主机的 500 错误并阻止 IP
- c# - Webview UWP Win 8.1 中兼容的启用模式
- javascript - 提交表单时不显示单选按钮值
- css - 清除属性不适用于第 n 个子选择器
- ruby-on-rails - 卸载加载jQuery dataTables Rails 5.2
- testing - 测试期间的日志记录和预期异常
- c++ - 如何使用树莓派获取 ina219 传感器数据
- jquery - jQuery ajax.error() 用于除 403 之外的所有错误