ruby-on-rails - 从第一个用户注销后,设计 + 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 存在一样。
希望我能正确解释这一点我一直在寻找答案大约一个星期。任何帮助,将不胜感激
解决方案
在另一篇文章中找到答案 - 必须覆盖设计商店?改为返回 false解决方案在这里
推荐阅读
- kibana - 2 过滤dsl查询看起来一样以及如何组合
- android - 每秒插入/更新到 SQLite 数据库 Android
- xamarin.forms - Xamarin 表单:如何将具有参数的内容页面添加到列表中?
- css - 在 SVG 上使用 gsap 动画进行不透明度渲染的问题
- c++ - 如何从文本文件中删除所有行和单词直到某个点
- php - PHP如何使用只有私钥的ssh函数
- embedded - swupdate 成功更新的显式标记
- javascript - 如何在这个 Pixel Art Maker 的 Javascript 中修复这个颜色事件函数?
- javascript - 错误:收到未知参数:来源
- node.js - Firebase (GCP) 云函数在本地运行 (nodejs 8) 有 EMPTY 请求查询