从第一个用户注销后,设计 + JWT 未获得正确的用户
Devise + JWT Not getting Correct User, after logging out from first user
所以我的问题是:当我使用用户 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 时,模块被命中并将 current_user 设置为用户 B.
我在每次请求时都会发送 JWT,但有趣的是,在第一个请求后删除时,我仍然会收到回复,就好像 JWT 存在一样。
希望我解释正确
我一直在寻找答案大约一个星期了。任何帮助将不胜感激
在另一个 post 中找到了答案- 是否必须覆盖设计商店?改为 return false Solution Here
所以我的问题是:当我使用用户 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 时,模块被命中并将 current_user 设置为用户 B.
我在每次请求时都会发送 JWT,但有趣的是,在第一个请求后删除时,我仍然会收到回复,就好像 JWT 存在一样。
希望我解释正确 我一直在寻找答案大约一个星期了。任何帮助将不胜感激
在另一个 post 中找到了答案- 是否必须覆盖设计商店?改为 return false Solution Here