首页 > 解决方案 > 从第一个用户注销后,设计 + JWT 没有得到正确的用户

问题描述

所以我的问题是:当我使用用户 A(是管理员)登录时,它工作正常,我可以列出数据库中的用户列表。

当我注销并使用用户 B(普通用户)登录时会出现问题,我也可以列出不应该发生的用户(并且 current_user 仍然是用户 A)。但是,如果我删除 rails 应用程序发回的 httpOnly cookie,然后使用用户 B 从 JWT 请求具有令牌的用户列表,我会得到 401,这就是我想要的。

我有一个初始化程序

module Devise
  module Strategies
    class JWTAuthenticatable < Base
      def authenticate!
        token = get_token
        return fail(:invalid) unless token.present?

        payload = WebToken.decode(token)
        return fail(:invalid) if payload == :expire

        resource = mapping.to.find(payload['user_id'])
        return fail(:not_found_in_database) unless resource

        success! resource       
      end

      private 

      def get_token 
        auth_header.present? && auth_header.split(' ').last
      end

      def auth_header
        request.headers['Authorization']
      end
    end
  end
end

我的应用程序控制器是


class ApplicationController < ActionController::Base
   protect_from_forgery with: :null_session, prepend: true
   before_action :authenticate_user!
end

它只会从第一个请求中被击中一次,但之后不会有任何请求,并且 current_user 停留在第一个登录用户上。但是当 httpOnly cookie 被删除时,Module 再次被击中并将 current_user 设置为 User B。

我在每个请求中都发送 JWT,但有趣的是,在第一个请求后删除时,我仍然得到响应,就好像 JWT 存在一样。

希望我能正确解释这一点我一直在寻找答案大约一个星期。任何帮助,将不胜感激

标签: ruby-on-railsdevisejwt

解决方案


在另一篇文章中找到答案 - 必须覆盖设计商店?改为返回 false解决方案在这里


推荐阅读