【问题标题】:Google Ruby API Client redirect_uri_mismatch errorGoogle Ruby API 客户端 redirect_uri_mismatch 错误
【发布时间】:2015-10-31 14:26:37
【问题描述】:

我正在尝试使用 Google 的 API 注册用户并将其登录到我的 rails webapp。我一直在玩身份验证,但是在获得授权码后我就遇到了这个错误。

这就是我想要做的:

path = Rails.root.to_s + PATH_TO_JSON_FILENAME_FROM_GOOGLE_API

client_secrets = Google::APIClient::ClientSecrets.load(path)

auth_client = client_secrets.to_authorization

auth_client.update!(
  :scope => 'https://www.googleapis.com/auth/drive.metadata.readonly',
  :redirect_uri => REDIRECT_URI

)

auth_client.code = ACCESS_CODE_RETURNED_BY_GOOGLE_WHEN_USER_LOGS_IN

auth_client.fetch_access_token!

几个问题:

  1. 我真正想要的只是用户名和他们的电子邮件地址。我不清楚:scope 的正确值应该是多少。
  2. 对于redirect_uri,我将其设置为我的 Google API 控制台中的重定向 uri 之一。类似于http://localhost:3000/auth/callback 的东西。尽管如此,我还是收到了以下 json 响应:

    { “错误”:“redirect_uri_mismatch” }

想到我在这里可能做错了什么?

【问题讨论】:

    标签: ruby-on-rails ruby google-api-ruby-client


    【解决方案1】:

    终于想通了。我需要将redirect_uri 设置为postmessage,因为这就是我最初请求授权码的方式。这是我的完整解决方案:

    我使用以下内容加载 Google 身份验证库:

    function start() {
      gapi.load('auth2', function() {
        auth2 = gapi.auth2.init({
          client_id: 'MY_CLIENT_ID',
        });
      });
    };
    

    我创建了一个 HTML 按钮,点击它会调用以下函数:

    function(e){
        e.preventDefault();    
        auth2.grantOfflineAccess({'redirect_uri': 'postmessage'}).then(this.signInCallback);
    },
    

    现在signInCallback 函数正在记录我的授权代码,以便我可以测试我正在编写的 ruby​​ 服务器代码:

    function(authResult) {
        console.log(authResult.code);
    }
    

    这是我的 ruby​​ 文件的样子:

    client = Google::APIClient.new
    client.authorization.client_id = MY_CLIENT_ID
    client.authorization.client_secret = MY_CLIENT_SECRET
    client.authorization.redirect_uri = "postmessage"
    client.authorization.code = CODE_THAT_WAS_LOGGED_TO_CONSOLE
    client.authorization.fetch_access_token!
    

    更多信息:您必须使用“postmessage”调用grantOfflineAccess。我尝试从我的开发人员控制台中输入一个实际的重定向 uri,但它不喜欢这样(更多信息请参见SO question)。我发现如果你这样做,那么当你尝试用授权码交换访问令牌时,你需要在服务器端做同样的事情。

    【讨论】:

      【解决方案2】:

      重定向URI不匹配错误肯定意味着重定向URI与注册的不同。额外确保 URI 相同。

      【讨论】:

      • 我已经检查了三次,甚至直接从 API 控制台复制并粘贴到我的 ruby​​ 文件中,但我仍然收到错误消息。我是否在上面的代码中正确设置了 redirect_uri 并进行了更新!方法调用?
      • 我认为是对的。我以前使用过这个 Ruby API 客户端,这很痛苦。我必须检查我的代码,看看它是否与您的不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 2013-01-15
      • 2013-01-19
      • 2014-12-05
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多