ruby-on-rails 如何通过GraphQL mutation从Rails中销毁当前用户会话

yzxexxkh  于 2023-08-08  发布在  Ruby
关注(0)|答案(2)|浏览(115)

我试图通过graphql mutation来清除用户会话,该mutation将user_id作为参数,并销毁用户会话并发送一条消息,该消息将进一步被前端用于注销。

argument :user_id, ID, required: true
  field :message, String, null: true

  def resolve(user_id:)
    user = User.find_by(id: user_id)
    raise GraphQL::ExecutionError, 'User not found.' unless user.present?
    destroy_user_session(user_id)
    user.save!
    { message: 'User session cleared'}
  end
  
  private

  def destroy_user_session(user_id)
    binding.pry
    session = context[:session]
    session.clear
    raise GraphQL::ExecutionError, 'Failed to clear session.' unless session.empty?
  end
end

字符串
但问题是,用户会话在这里没有被正确销毁。我正在使用localhost:3000/api/graphql测试它,我首先调用突变,然后调用一些其他查询,一旦用户登录,不幸的是,这两个查询都被调用,而不是抛出像authorization is requried这样的错误。我尝试了几个步骤从不同的网站,但仍然被困在这里。

xbp102n0

xbp102n01#

由于graphql_controller继承自application_controller,如果您正在使用devise,您应该可以访问sign_out方法,因此如果您尝试调用context[:controller].sign_out,它应该可以工作

def destroy_user_session(user_id)
    context[:controller].sign_out
    session = context[:session]
    session.clear
    raise GraphQL::ExecutionError, 'Failed to clear session.' unless session.empty?
  end

字符串

ktecyv1j

ktecyv1j2#

def destroy_user_session
  context[:controller].sign_out
end

字符串
上面的代码就足够了。你不必再写了。(以下为Nirajan的回答)

相关问题