Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计JWT“;继续之前,您需要登录或注册”;_Ruby On Rails_Ruby_Devise_Jwt - Fatal编程技术网

Ruby on rails 设计JWT“;继续之前,您需要登录或注册”;

Ruby on rails 设计JWT“;继续之前,您需要登录或注册”;,ruby-on-rails,ruby,devise,jwt,Ruby On Rails,Ruby,Devise,Jwt,你是我最后的机会 我试着从design\u token\u auth转到design jwt 当我尝试登录用户时,Desive会回答:“您需要先登录或注册,然后才能继续。” 配置: 设计4.7.1 设计jwt 0.8 rails 6.0 ruby 2.7.1 这是我的代码: module Api module V2 module Devise class SessionsController < ::Devise::SessionsController

你是我最后的机会 我试着从
design\u token\u auth
转到
design jwt
当我尝试登录用户时,Desive会回答:“您需要先登录或注册,然后才能继续。” 配置:

  • 设计4.7.1
  • 设计jwt 0.8
  • rails 6.0
  • ruby 2.7.1
这是我的代码:

module Api
  module V2
    module Devise
      class SessionsController < ::Devise::SessionsController
        skip_before_action :verify_authenticity_token
        include ::Api::V2::Concerns::Response

        respond_to :json

        private

        def respond_with(resource, _opts = {})
          render_json ::V2::UserSerializer.new(resource)
        end

        def respond_to_on_destroy
          head :ok
        end
      end
    end
  end
end
(我还与管理员用户(非jwt)合作设计,并为api用户禁用设计令牌认证路由:)

设计初始值设定项:

  config.skip_session_storage = %i[http_auth]
  config.navigational_formats = ['*/*', :html, :pdf]
  config.jwt do |jwt|
    jwt.secret = ENV['DEVISE_JWT_SECRET_KEY']
    jwt.expiration_time = 1.day.to_i
  end
用户模型:

  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable,
         :jwt_authenticatable, jwt_revocation_strategy: JWTDenylist

  self.skip_session_storage = %i[http_auth params_auth]
我试图注册一个新用户,但它的工作与cookies(设计返回cookies),而不是JWT在标题

设计形态:

> Devise::JWT.config
=> #<Dry::Configurable::Config values={:secret=>"secret", :expiration_time=>86400, :dispatch_requests=>[["POST", /^\/(:locale)\/api\/v2\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v1\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v1\/auth$/], ["POST", /^\/(\/:locale)\/api\/v2\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v2\/auth$/]], :revocation_requests=>[], :aud_header=>"JWT_AUD", :request_formats=>{}}>


> Warden::JWTAuth.config
=> #<Dry::Configurable::Config values={:secret=>"secret", :algorithm=>"HS256", :expiration_time=>86400, :aud_header=>"JWT_AUD", :mappings=>{:api_v1_user=>User (call 'User.connection' to establish a connection), :api_v2_user=>User (call 'User.connection' to establish a connection)}, :dispatch_requests=>[["POST", /^\/(:locale)\/api\/v2\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v1\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v1\/auth$/], ["POST", /^\/(\/:locale)\/api\/v2\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v2\/auth$/]], :revocation_requests=>[["DELETE", /^\/(\/:locale)\/api\/v1\/auth\/sign_out$/], ["DELETE", /^\/(\/:locale)\/api\/v2\/auth\/sign_out$/]], :revocation_strategies=>{:api_v1_user=>JWTDenylist (call 'JWTDenylist.connection' to establish a connection), :api_v2_user=>JWTDenylist (call 'JWTDenylist.connection' to establish a connection)}}>


> Devise.mappings
=> {:admin_admin_user=>#<Devise::Mapping:0x0000555fd7602188 @scoped_path="admin/admin_users", @singular=:admin_admin_user, @class_name="AdminUser", @klass=#<Devise::Getter:0x0000555fd7601ad0 @name="AdminUser">, @path="admin_users", @path_prefix="(/:locale)/admin", @sign_out_via=:delete, @format=nil, @router_name=nil, @failure_app=Devise::FailureApp, @controllers={:registrations=>"admin/devise/registrations", :sessions=>"admin/devise/sessions", :passwords=>"admin/devise/passwords"}, @path_names={:registration=>"", :new=>"new", :edit=>"edit", :sign_in=>"sign_in", :sign_out=>"sign_out", :password=>"password"}, @modules=[:database_authenticatable, :recoverable], @routes=[:session, :password], @used_routes=[:session, :password], @used_helpers=[:session, :password]>, :api_v1_user=>#<Devise::Mapping:0x0000555fd6e718d8 @scoped_path="api_v1/users", @singular=:api_v1_user, @class_name="User", @klass=#<Devise::Getter:0x0000555fd6e71720 @name="User">, @path="auth", @path_prefix="(/:locale)/api/v1", @sign_out_via=:delete, @format=nil, @router_name=nil, @failure_app=Devise::FailureApp, @controllers={:unlocks=>"devise_token_auth/unlocks"}, @path_names={:registration=>"", :new=>"new", :edit=>"edit"}, @modules=[:database_authenticatable, :rememberable, :recoverable, :registerable, :validatable, :jwt_authenticatable], @routes=[:session, :password, :registration], @used_routes=[], @used_helpers=[:session, :password, :registration]>, :api_v2_user=>#<Devise::Mapping:0x0000555fd60297f8 @scoped_path="api_v2/users", @singular=:api_v2_user, @class_name="User", @klass=#<Devise::Getter:0x0000555fd60292d0 @name="User">, @path="auth", @path_prefix="(/:locale)/api/v2", @sign_out_via=:delete, @format=nil, @router_name=nil, @failure_app=Devise::FailureApp, @controllers={:registrations=>"api/v2/devise/registrations", :sessions=>"api/v2/devise/sessions"}, @path_names={:registration=>"", :new=>"new", :edit=>"edit", :sign_in=>"sign_in", :sign_out=>"sign_out", :sign_up=>"sign_up", :cancel=>"cancel"}, @modules=[:database_authenticatable, :rememberable, :recoverable, :registerable, :validatable, :jwt_authenticatable], @routes=[:session, :password, :registration], @used_routes=[:session, :registration], @used_helpers=[:session, :password, :registration]>}
>设计::JWT.config
“秘密”一方的“秘密”一方的“秘密”一方的“秘密”一方的“秘密”一方的:到期时间一方的时间一方的时间一方的时间一方的时间一方的时间一方的时间一方的时间一方的时间一方的时间一方的时间一方的时间一方的一方的时间一方的时间一方的一方的一方的请求一方的请求一方的发送一方的请求一方的请求一方的请求一方的方的方的请求一方的请求方的一方的一方的请求方的一方的一方的一方的一方的一方的一方的一方的一方的一方的一方的一方的一方的请求方的请求方的方的请求方的[[[据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据据(以下的:::::,:撤销请求=>[],:aud\u头=>“JWT_AUD”,请求格式=>{}>
>Warden::JWTAuth.config
=>“secret”、:algorithm=>“HS256”、:expiration\u time=>86400、:aud\u header=>“JWT\u aud”、:mappings=>{:api\u v1\u user=>user(调用'user.connection'建立连接),:api\u v2\u user=>user(调用'user.connection'建立连接)},:分派请求=>[[POST',/^\/(:locale)\/api\/v2\/auth\/sign$/,[“POST”,/:locale)\/另外,据“邮政”和(现场)两个不同的地区,除了除了除了“邮政”之外,还有另外一个地区,除了除了除了“邮政”之外,还有一些地区,除了除了除了“邮政”之外,除了除了除了除了除了除了除了“邮政”之外,除了除了除了“邮政”以外,除了除了除了“邮政”以外,除了除了除了“邮政”以外,另外,除了除了除了除了除了“邮政”以外,除了除了除了除了除了除了除了除了“邮政”外,除了除了除了除了除了除了除了除了除了除了,”,”,”外,除了除了除了除了除了除了除了除了“邮政”,外,除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了,”,”,”,”外,除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了“邮政,”,”,”,”,”,”,”,”外,除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了,”,”,”,”,”,”,”外,除了除了除了除了除了除了除了除了除了除了除了除了除了,:撤销策略=>{:api_v1_user=>JWTDenylist(调用'JWTDenylist.connection'建立连接),:api_v2_user=>JWTDenylist(调用'JWTDenylist.connection'建立连接)}>
>设计地图
=>{:admin\u admin\u user=>{:admin/designe/registrations],:sessions=>“admin/designe/sessions”,:passwords=>“admin/designe/passwords”},@path\u names={:registration=>”,:new=>“new=”,:edit=>“edit=”,:sign\u-in=>“sign\u-in”,:sign\u-out=>“sign\u-out”,:password=>“sign\u”},@modules=>,@modules=[:database=>,:可验证的,:可恢复的],@routes=>,@routes=>,:[:,@used_routes=[:session,:password],@used_helpers=[:session,:password]>,:api_v1_user=>,@designe_token_auth/unlocks“},@path_names={:registration=>,:new=>“new”,:edit=>“edit”},@modules=[:database_authenticateable,:memberable,:可恢复,:可注册,:可注册,:可验证,:jwt authenticateable,:routes=[:session,@used_routes=[],@used_helpers=[:session,:password,:registration]>,:api_v2_user=>“api/v2/设计/注册”,:sessions=>“api/v2/designe/sessions”},@path_name={:注册=>,:new=>“new=”,:edit=>“edit=>“edit”,:sign\u-in=>“sign\u-in”,:sign\u-out=>“sign\u-out”,:sign\u=>“sign\u-up=>“sign\u-up”,:sign\u-up=>“sign\u-up”,:cancell==[:database_authenticable,:rememberable,:recoverable,:registerable,:validable,:jwt_authenticable],@routes=[:session,:password,:registration],@used_routes=[:session,:registration],@used_helpers=[:session,:password,:registration]>}

我也遇到了同样的问题,但后来我意识到,通过在命名空间内为
设计,设计控制器会将
资源名
分配给
api/v1/user
(或类似的东西)

您能否尝试将
设计\u移动到所有
命名空间
块之外,并将其路径更改为
路径:“api/v2/auth”

我想这会有帮助的!请告诉我是怎么回事

  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable,
         :jwt_authenticatable, jwt_revocation_strategy: JWTDenylist

  self.skip_session_storage = %i[http_auth params_auth]
> Devise::JWT.config
=> #<Dry::Configurable::Config values={:secret=>"secret", :expiration_time=>86400, :dispatch_requests=>[["POST", /^\/(:locale)\/api\/v2\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v1\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v1\/auth$/], ["POST", /^\/(\/:locale)\/api\/v2\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v2\/auth$/]], :revocation_requests=>[], :aud_header=>"JWT_AUD", :request_formats=>{}}>


> Warden::JWTAuth.config
=> #<Dry::Configurable::Config values={:secret=>"secret", :algorithm=>"HS256", :expiration_time=>86400, :aud_header=>"JWT_AUD", :mappings=>{:api_v1_user=>User (call 'User.connection' to establish a connection), :api_v2_user=>User (call 'User.connection' to establish a connection)}, :dispatch_requests=>[["POST", /^\/(:locale)\/api\/v2\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v1\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v1\/auth$/], ["POST", /^\/(\/:locale)\/api\/v2\/auth\/sign_in$/], ["POST", /^\/(\/:locale)\/api\/v2\/auth$/]], :revocation_requests=>[["DELETE", /^\/(\/:locale)\/api\/v1\/auth\/sign_out$/], ["DELETE", /^\/(\/:locale)\/api\/v2\/auth\/sign_out$/]], :revocation_strategies=>{:api_v1_user=>JWTDenylist (call 'JWTDenylist.connection' to establish a connection), :api_v2_user=>JWTDenylist (call 'JWTDenylist.connection' to establish a connection)}}>


> Devise.mappings
=> {:admin_admin_user=>#<Devise::Mapping:0x0000555fd7602188 @scoped_path="admin/admin_users", @singular=:admin_admin_user, @class_name="AdminUser", @klass=#<Devise::Getter:0x0000555fd7601ad0 @name="AdminUser">, @path="admin_users", @path_prefix="(/:locale)/admin", @sign_out_via=:delete, @format=nil, @router_name=nil, @failure_app=Devise::FailureApp, @controllers={:registrations=>"admin/devise/registrations", :sessions=>"admin/devise/sessions", :passwords=>"admin/devise/passwords"}, @path_names={:registration=>"", :new=>"new", :edit=>"edit", :sign_in=>"sign_in", :sign_out=>"sign_out", :password=>"password"}, @modules=[:database_authenticatable, :recoverable], @routes=[:session, :password], @used_routes=[:session, :password], @used_helpers=[:session, :password]>, :api_v1_user=>#<Devise::Mapping:0x0000555fd6e718d8 @scoped_path="api_v1/users", @singular=:api_v1_user, @class_name="User", @klass=#<Devise::Getter:0x0000555fd6e71720 @name="User">, @path="auth", @path_prefix="(/:locale)/api/v1", @sign_out_via=:delete, @format=nil, @router_name=nil, @failure_app=Devise::FailureApp, @controllers={:unlocks=>"devise_token_auth/unlocks"}, @path_names={:registration=>"", :new=>"new", :edit=>"edit"}, @modules=[:database_authenticatable, :rememberable, :recoverable, :registerable, :validatable, :jwt_authenticatable], @routes=[:session, :password, :registration], @used_routes=[], @used_helpers=[:session, :password, :registration]>, :api_v2_user=>#<Devise::Mapping:0x0000555fd60297f8 @scoped_path="api_v2/users", @singular=:api_v2_user, @class_name="User", @klass=#<Devise::Getter:0x0000555fd60292d0 @name="User">, @path="auth", @path_prefix="(/:locale)/api/v2", @sign_out_via=:delete, @format=nil, @router_name=nil, @failure_app=Devise::FailureApp, @controllers={:registrations=>"api/v2/devise/registrations", :sessions=>"api/v2/devise/sessions"}, @path_names={:registration=>"", :new=>"new", :edit=>"edit", :sign_in=>"sign_in", :sign_out=>"sign_out", :sign_up=>"sign_up", :cancel=>"cancel"}, @modules=[:database_authenticatable, :rememberable, :recoverable, :registerable, :validatable, :jwt_authenticatable], @routes=[:session, :password, :registration], @used_routes=[:session, :registration], @used_helpers=[:session, :password, :registration]>}