首页 > 解决方案 > 在删除用户时设计令牌身份验证跳过更新身份验证标头

问题描述

我在我的 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。

标签: ruby-on-railsdevisedevise-token-auth

解决方案


这样做的方法是在控制器顶部添加以下代码行:

skip_after_action :update_auth_header, only: %i[destroy]

这样做是在设计中为“销毁”方法定义的操作之后跳过 update_auth_header。


推荐阅读