Google脚本oauth2错误:redirect_uri_mismatch

时间:2017-01-03 16:30:29

标签: google-apps-script google-sheets oauth2

如果不搜索和阅读文档,我不会问这个问题。到目前为止我花了2天时间。我相信我错过了...... 我想在驱动器电子表格上实现google auth。我已经尝试了所有但仍然收到错误消息(redirect_uri_mismatch)。基本上,我想要一个带有登录屏幕的侧面板。用户点击按钮,auth magic运行并重定向到另一个html打印"成功"当用户允许访问时。

  1. 我在google dev控制台中创建了一个项目。
  2. 创建凭据
    2.1客户ID:
    131579675294-jc1c0ckuaa7n7ih7eevg19cisthgt00e.apps.googleusercontent.com

    2.2客户机密:XaebFsC18qfMmcZJKgokLEYo

  3. 设置回调uri:
    https:// script.google.com/macros/d/MCgMJPIdD1bbeG1PsFaNug8uUifae5TWT/usercallback

  4. 项目密钥: MCgMJPIdD1bbeG1PsFaNug8uUifae5TWT

    脚本ID: 1DYEShH45-AtikbEwfAG8w9P7Y39FHhCB-nGHWHOW4mUtq5DZLvubDxev

    据说不推荐使用projectKey,而是需要使用脚本ID但不起作用。

  5. 我使用oauth2所以我添加了the external lib:1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF

  6. 说明:我的gs文件在下面有以下代码。单击时,我有一个带有按钮的侧边栏调用onSignIn()。我希望能够使用auth访问电子表格。作为一个起点,我想看到授权页面。在接受它之后,我希望它重定向到一个callback_uri页面并显示一些简单的东西。但它确实给了我错误。具有讽刺意味的是我创建的端点浏览器链接并成功重定向。

  7. ENDPOINT BROWSER LINK

    https://accounts.google.com/o/oauth2/auth?redirect_uri=https%3A%2F%2Fscript.google.com%2Fmacros%2Fd%2FMCgMJPIdD1bbeG1PsFaNug8uUifae5TWT%2Fusercallback&response_type=code&client_id=131579675294-jc1c0ckuaa7n7ih7eevg19cisthgt00e.apps.googleusercontent.com&approval_prompt=force&scope=https%3A%2F%2Fdocs.google.com%2Ffeeds

    我做错了什么?非常感谢您的帮助。 THX。

        var CLIENT_ID = '131579675294-jc1c0ckuaa7n7ih7eevg19cisthgt00e.apps.googleusercontent.com';
    
        var CLIENT_SECRET = 'XaebFsC18qfMmcZJKgokLEYo';
    
        function onSignIn() {
            var service = getService();
            if (!service.hasAccess()) {
              var authorizationUrl = service.getAuthorizationUrl();
              var template = HtmlService.createTemplate('<a href="<?= authorizationUrl ?>" target="_blank">Authorize</a>');
              template.authorizationUrl = authorizationUrl;
              var page = template.evaluate();
              return HtmlService.createHtmlOutput( page);
            }
        }
    
    
          function authCallback(request) {
            var service = getService();
            var authorized = service.handleCallback(request);
            if (authorized) {
                return HtmlService.createHtmlOutput('Success!');
            } else {
                return HtmlService.createHtmlOutput('Denied');
            }
          }
    
    
    
          function getService() {
            return OAuth2.createService('spreadsheets_ozzy123')
    
                .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
    
                .setTokenUrl('https://accounts.google.com/o/oauth2/token')
    
                .setClientId(CLIENT_ID)
    
                .setClientSecret(CLIENT_SECRET)
    
                .setCallbackFunction('authCallback')
    
                .setScope('https://docs.google.com/feeds')  ;   
          }
    
    
    
    
          function onOpen() {
                SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
                    .createMenu('Custom Menu')
                    .addItem('Show sidebar', 'showSidebar')
                    .addToUi();  
          }
    
    
          function showSidebar() {
             var html =  HtmlService.createTemplateFromFile('LoginSideMenu').evaluate();
                SpreadsheetApp.getUi().showSidebar(html); 
          }
    
    
          function include(filename) {
              return HtmlService.createHtmlOutputFromFile(filename).getContent();
          }
    

    完全错误

    400. That’s an error.
    
    Error: redirect_uri_mismatch
    
    The JavaScript origin in the request, https://n-g7vwwdjiqopmv3hpcys4noea4krn6nxax6uaoda-0lu-script.googleusercontent.com, does not match the ones authorized for the OAuth client. Visit https://console.developers.google.com/apis/credentials/oauthclient/131579675294-jc1c0ckuaa7n7ih7eevg19cisthgt00e.apps.googleusercontent.com?project=131579675294 to update the authorized JavaScript origins.
    
    Learn more
    
    Request Details
    redirect_uri=storagerelay://https/n-g7vwwdjiqopmv3hpcys4noea4krn6nxax6uaoda-0lu-script.googleusercontent.com?id=auth704130
    response_type=permission id_token
    scope=email profile openid
    openid.realm=
    client_id=131579675294-jc1c0ckuaa7n7ih7eevg19cisthgt00e.apps.googleusercontent.com
    ss_domain=https://n-g7vwwdjiqopmv3hpcys4noea4krn6nxax6uaoda-0lu-script.googleusercontent.com
    fetch_basic_profile=true
    gsiwebsdk=2
    That’s all we know.
    

1 个答案:

答案 0 :(得分:4)

  1. 转到资源 - &gt;先进的服务。点击底部的Google开发者控制台。

  2. 您可以打开API管理器。

  3. 现在,转到最左侧面板中的凭据。

  4. 确保您使用了代码中显示的相同客户端ID。 此外,还有两个选项:授权的js起源和授权的重定向URL。
  5. 在网址选项中,粘贴400错误中不匹配的网址。
  6. 点击保存,然后重试。