成功验证用户名和密码后,门卫 gem 给出“invalid_client”

Bha*_*rav 3 ruby-on-rails

http://localhost:3000/oauth/token

\n
{\n"error": "invalid_client",\n"error_description": "Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method."\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在实施门卫时..

\n

于 2021 年 6 月 13 日 19:56:20 +0530 开始为 ::1 发布“/oauth/token”\n由 Doorkeeper::TokensController#create as / \n参数: {"grant_type"=>"password", "用户名”=>“bhagwan”,“密码”=>“[已过滤]”}\n用户负载(7.0 毫秒)选择“用户”。来自“用户”,其中“用户”。“电子邮件”=?限制 ?[["email", "bhagwan"], ["LIMIT", 1]]\n\xe2\x86\xb3 config/initializers/doorkeeper.rb:19:in `block (2 level) in '\nCompleted 401 Unauthorized在 1654 毫秒内(查看:0.5 毫秒 | ActiveRecord:28.7 毫秒 | 分配:5869) *

\n

在门卫.rb中

\n
grant_flows %w[password]\n\nresource_owner_from_credentials do\nUser.find_by(email: params[:username])\n&.authenticate(params[:password]) || nil\nend\n
Run Code Online (Sandbox Code Playgroud)\n

Per*_*sta 7

就我而言,这是因为应用程序是private默认的。必须将应用程序更新为公开update!(confidential: false)。因为 Doorkeeper5.0.0应用程序默认是私有的(参考)。

  • 超级重要的答案!如果能有更多记录的话,我可以节省很多时间。 (2认同)

小智 6

您可以使用skip_client_authentication_for_password_grant配置选项来跳过您的案例的客户端身份验证:

Doorkeeper.configure do
  skip_client_authentication_for_password_grant true
end
Run Code Online (Sandbox Code Playgroud)