JSON参数在请求哈希中不可用(Rails,omniauth-google-oauth2 gem)

托比亚斯·盖斯勒

概述

我想用Omniauth Google OAuth2 Gem(0.2.6)实现Google OAuth2服务器端(混合)。但是,我发送到我的应用程序的代码参数不会添加到request.params哈希中。因此,由于无法找到代码,OmniAuth会引发错误。

细节

从Google检索身份验证代码后,我将其发送到服务器(通过AJAX):

// Send the code to the server
    $.ajax({
      type: 'POST',
      url: '/auth/google_oauth2/callback',
      contentType: 'application/json',
      success: function(result) {
        // Handle or verify the server response.
      },
      processData: false,
      data: JSON.stringify(password_result)
    });

这将引发错误:

"error" : "invalid_request",
"error_description" : "Missing required parameter: code"

遍历堆栈后,我发现了以下内容:

  1. 只要我将'application / json'设置为内容类型,Rack就会正确解析参数,并且env对象包含已解析的参数:

    "action_dispatch.request.request_parameters"=>{"code"=>"<sent_in_code>"}
    
  2. 但是,request.params哈希保持为空。由于OmniAuth检查request.params['code'],因此这是错误的根源。

  3. request.POST是空的,从Rack的源代码来看,这是空的request.params哈希的根本原因。

  4. 当以的标准格式发送代码时data:"code="+authResult['code'],该参数在request.params哈希中可用。(然后,我收到一个奇怪的未定义路由错误,但这是一个不同的问题。)

问题

现在,即使我可以通过不使用JSON来避免此问题,但我对以下问题的答案仍然非常感兴趣:

  1. 为什么代码参数在request.POST/request.params中不可用,即使它已正确解析?
  2. 有没有办法解决此问题,所以我仍然可以将JSON中的身份验证代码发送到我的应用程序?

我花了两个下午试图自己找到答案,但是到目前为止,还没有真正得出一个好的结论。

乔尼

omniauth-google-oauth2尝试从Rack::Request.params哈希中获取身份验证代码但是,Rack显然没有内置的JSON解析。参数调用POST,然后调用form_data?只寻找application/x-www-form-urlencodedmultipart/form-data然后,它还会尝试parseable_data吗?,也不会解析JSON。似乎Rack不支持开箱即用,也请查看此答案

"action_dispatch.request.request_parameters"=>{"code"=>"<sent_in_code>"}散列工作,因为这是由轨道ActionDispatch ::请求,其子类货架::请求完成。但是,由于omniauth gem作为Rack中间件包含在您的应用程序中,因此它不知道ActionDispatch请求对象。

问题仍然是为什么该示例使用JSON。

可能的解决方案:

  • money-Patch JSON Support into Rack-不推荐
  • 只需使用application/x-www-form-urlencoded-推荐

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ruby google_drive gem oAuth2保存

来自分类Dev

Rails:Google OAUTH2,正确发送发帖请求

来自分类Dev

google oauth2获取令牌javascript发布请求

来自分类Dev

使用 OAuth2 验证 Google PubSub POST 请求

来自分类Dev

Rails - Google oauth2 request.env['omniauth.auth'] is nil using omniauth with multiple models

来自分类Dev

将 google login_hint 参数添加到 Spring oauth2 AuthorizationCode 请求中

来自分类Dev

Google OAuth2 API

来自分类Dev

Facebook Oauth可以工作,但是Google Oauth2错误:Django中的redirect_uri_mismatch

来自分类Dev

redirect_uri_mismatch与Heroku上的OmniAuth Google oauth2

来自分类Dev

带有devise和omniauth的Google oauth2被视为失败

来自分类Dev

Rails-在多个模型上使用omniauth时,Google oauth2 request.env ['omniauth.auth']为零

来自分类Dev

使用symfony2中的Oauth2库登录Facebook或Google

来自分类Dev

使用Indy HTTP的Delphi Google oauth2令牌请求获得400错误请求

来自分类Dev

google OAUTH2交换访问权限代码以获取acces令牌“无效请求”

来自分类Dev

Google的Oauth2响应提出了DotNetOpenAuth 400错误的请求

来自分类Dev

从本地主机发送请求时,Google Oauth2 redirect_uri_mismatch

来自分类Dev

Google云端硬盘-无法下载经过身份验证(OAuth2)请求的缩略图

来自分类Dev

google OAUTH2交换访问权限代码以获取acces令牌“无效请求”

来自分类Dev

Google API-来自Oauth2的令牌请求返回空令牌

来自分类Dev

Google OAuth2回调不带参数即可致电给我

来自分类Dev

Google Analytics(分析)API:如何解决OAuth2缺少范围参数错误?

来自分类Dev

如何在Node.js中的Google OAuth2中发现API

来自分类Dev

如何在Node.js中的Google OAuth2中发现API

来自分类Dev

Google OAuth2验证服务器流中的访问令牌

来自分类Dev

Rails和OAuth2

来自分类Dev

Rails和OAuth2

来自分类Dev

OAuth2与Google云端列印

来自分类Dev

Google OAuth2验证挂起

来自分类Dev

从Google AuthSub迁移到OAuth2

Related 相关文章

  1. 1

    Ruby google_drive gem oAuth2保存

  2. 2

    Rails:Google OAUTH2,正确发送发帖请求

  3. 3

    google oauth2获取令牌javascript发布请求

  4. 4

    使用 OAuth2 验证 Google PubSub POST 请求

  5. 5

    Rails - Google oauth2 request.env['omniauth.auth'] is nil using omniauth with multiple models

  6. 6

    将 google login_hint 参数添加到 Spring oauth2 AuthorizationCode 请求中

  7. 7

    Google OAuth2 API

  8. 8

    Facebook Oauth可以工作,但是Google Oauth2错误:Django中的redirect_uri_mismatch

  9. 9

    redirect_uri_mismatch与Heroku上的OmniAuth Google oauth2

  10. 10

    带有devise和omniauth的Google oauth2被视为失败

  11. 11

    Rails-在多个模型上使用omniauth时,Google oauth2 request.env ['omniauth.auth']为零

  12. 12

    使用symfony2中的Oauth2库登录Facebook或Google

  13. 13

    使用Indy HTTP的Delphi Google oauth2令牌请求获得400错误请求

  14. 14

    google OAUTH2交换访问权限代码以获取acces令牌“无效请求”

  15. 15

    Google的Oauth2响应提出了DotNetOpenAuth 400错误的请求

  16. 16

    从本地主机发送请求时,Google Oauth2 redirect_uri_mismatch

  17. 17

    Google云端硬盘-无法下载经过身份验证(OAuth2)请求的缩略图

  18. 18

    google OAUTH2交换访问权限代码以获取acces令牌“无效请求”

  19. 19

    Google API-来自Oauth2的令牌请求返回空令牌

  20. 20

    Google OAuth2回调不带参数即可致电给我

  21. 21

    Google Analytics(分析)API:如何解决OAuth2缺少范围参数错误?

  22. 22

    如何在Node.js中的Google OAuth2中发现API

  23. 23

    如何在Node.js中的Google OAuth2中发现API

  24. 24

    Google OAuth2验证服务器流中的访问令牌

  25. 25

    Rails和OAuth2

  26. 26

    Rails和OAuth2

  27. 27

    OAuth2与Google云端列印

  28. 28

    Google OAuth2验证挂起

  29. 29

    从Google AuthSub迁移到OAuth2

热门标签

归档