Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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 缺少必需的参数:范围。门卫gem从5.1.0升级到5.2.1后_Ruby On Rails_Doorkeeper - Fatal编程技术网

Ruby on rails 缺少必需的参数:范围。门卫gem从5.1.0升级到5.2.1后

Ruby on rails 缺少必需的参数:范围。门卫gem从5.1.0升级到5.2.1后,ruby-on-rails,doorkeeper,Ruby On Rails,Doorkeeper,doorkeeper在提供授权的Rails(5.2.3)应用程序上从5.1.0升级到5.2.1后,请求授权的应用程序的登录不再工作。授权应用程序上的页面声明缺少必需的参数:scope.,尽管我们不使用scope 迁移说明中有一些关于作用域的行,但它们没有告诉我 我知道我必须创建这样的迁移,但问题仍然存在: # frozen_string_literal: true class ChangeScopesOnOAuthAccessGrants < ActiveRecord::Migratio

doorkeeper在提供授权的Rails(5.2.3)应用程序上从5.1.0升级到5.2.1后,请求授权的应用程序的登录不再工作。授权应用程序上的页面声明
缺少必需的参数:scope.
,尽管我们不使用scope

迁移说明中有一些关于作用域的行,但它们没有告诉我

我知道我必须创建这样的迁移,但问题仍然存在:

# frozen_string_literal: true

class ChangeScopesOnOAuthAccessGrants < ActiveRecord::Migration[5.2]
  def up
    change_column_default :oauth_access_grants, :scopes, from: nil, to: ''
    change_column_null :oauth_access_grants, :scopes, false
  end

  def down
    change_column_default :oauth_access_grants, :scopes, from: '', to: nil
    change_column_null :oauth_access_grants, :scopes, true
  end
end
在运行迁移之前和之后,我对响应进行了更深入的研究。使用Doorkeeper模块的
AuthorizationsController\new
中的
binding.pry
(继承自
Doorkeeper::ApplicationController
),我可以确认
Doorkeeper::OAuth::PreAuthorization
的实例对于属性
scope
返回
nil
,但对于
scopes

调用
pre\u auth.authorizable?
后,我得到以下对象和值:

#<Doorkeeper::OAuth::PreAuthorization:0x00007fad33f25390
 @client=
  #<Doorkeeper::OAuth::Client:0x00007fad364b22e8
   @application=
    #<Doorkeeper::Application:0x00007fad364b26d0
     id: 2,
     name: "...",
     uid: "...",
     secret: "..",
     redirect_uri:
      "http://localhost:3001/users/auth/doorkeeper/callback",
     scopes: "",
     created_at: Tue, 24 Oct 2017 11:56:13 CEST +02:00,
     updated_at: Thu, 03 Oct 2019 18:53:35 CEST +02:00,
     confidential: true>>,
 @client_id="...",
 @code_challenge=nil,
 @code_challenge_method=nil,
 @error=:invalid_request,
 @missing_param=:scope,
 @redirect_uri="http://localhost:3001/users/auth/doorkeeper/callback",
 @response_type="code",
 @scope=nil,
 @server=
  #<Doorkeeper::Config:0x00007fad33b72180
   @access_token_expires_in=24 hours,
   @api_only=false,
   @application_secret_strategy=Doorkeeper::SecretStoring::???,
   @authenticate_admin=#<Proc:0x00007fad33b71d20@/Users/.../config/initializers/doorkeeper.rb:11>,
   @authenticate_resource_owner=#<Proc:0x00007fad33b71eb0@/Users/.../config/initializers/doorkeeper.rb:6>,
   @default_scopes=#<Doorkeeper::OAuth::Scopes:0x00007fad364cb7c0 @scopes=[]>,
   @orm=:active_record,
   @token_secret_strategy=Doorkeeper::SecretStoring::???>,
 @state="...">
#

我目前没有任何解决问题的线索。谢谢你的提示

您需要重新运行此命令以生成与新版本兼容的迁移。这将向
oauth\u access\u grants
scopes
属性添加一个NOTNULL选项

 bundle exec rails generate doorkeeper:migration
完成后,使用rake按常规运行迁移

rake db:migrate

我也有同样的问题。似乎您总是需要在授权请求中提供
范围
参数,或者配置
默认范围
(配置中有一个示例)。此外,默认或请求的作用域必须与您的一个客户端应用程序作用域匹配,否则您将得到请求的作用域无效、未知或格式错误。

这在中提到,但解释为数据库更改。链接更明确地说明了新要求:

如果客户端在请求时忽略了scope参数 授权,授权服务器必须处理 使用预定义的默认值请求或请求失败 指示无效的作用域。授权服务器应该 记录其范围要求和默认值(如果定义)


我同意这似乎没有充分记录在或,但似乎重要的是,他们更忠实于RFC6749。我使用的是
grant\u type:'authorization\u code'
,中甚至没有提到“scope”。

我手动创建了此迁移,但它不起作用。但我会用你的方法再试一次。我没有意识到这种可能性。迁移将添加我已经拥有的表以及新的表。所以它不是开箱即用的。你能试用一个全新的数据库吗?我会试用一个新的数据库。我添加了更多的调试细节。到目前为止没有进展。
rake db:migrate