编辑用户签名,但不能使用Oauth

时间:2014-08-06 12:38:59

标签: google-apps-script google-admin-sdk

我尝试通过GAS编辑用户签名。

我找到了很多例子和教程,其中一个Waqar Ahmad的答案看起来非常好 - Email Settings APIs Authentication。 但是,它对我没用。

我不太了解OAuth自动化,但无法找到它的教程。

我该如何替换anonymous

oAuthConfig.setConsumerKey("anonymous");
oAuthConfig.setConsumerSecret("anonymous");

我转到https://console.developers.google.com/创建一个项目并使用clientID作为密钥和客户端秘密进行保密,是不是?

添加更多信息:

这是我使用的Waqar代码:

     /*-----------------------------------------------------------------------------
    This function will update the HTML signature of a user.
    Input will be jason data
    To disable signature, pass an empty string as signature value
    sample parameter
    ob = {user='hps', signature='<b>Regards</b><br>Waqar'}

    To disable signature
    ob = {user='hps', signature=''}
    -----------------------------------------------------------------*/
    function updateSignature(ob) {
      //ob = {};
      //ob.user = "hps";
      //ob.signature = "<b>Regards</b><br>Waqar";

      ob = {};
      ob.user = "test@xxxx.it";
      ob.signature = "<b>Regards</b><br>Waqar";
      var base = 'https://apps-apis.google.com/a/feeds/emailsettings/2.0/';
      var xmlRaw = '<?xml version="1.0" encoding="utf-8"?>'+
          '<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:apps="http://schemas.google.com/apps/2006">'+
          '<apps:property name="signature" value="'+htmlEncode(ob.signature)+'" />'+
          '</atom:entry>';
      var fetchArgs = googleOAuth_('emailSetting',base);
      fetchArgs.method = 'PUT';
      fetchArgs.payload = xmlRaw;
      fetchArgs.contentType = 'application/atom+xml';
      var domain = UserManager.getDomain();
      var url = base+domain+'/'+ob.user+'/signature';
      var urlFetch = UrlFetchApp.fetch(url, fetchArgs);
      var status = urlFetch.getResponseCode();
      return status;
    }

    //--------------------------------------------------------------------------
    //This function will retreive Signature settings as json.
    /*Sample returned object
    {user=hps, signature=<b>Regards</b><br>Waqar}
    */
    //-----------------------------------------------------------------
    function retrieveSignature(user) {
      var user = 'hps';
      var base = 'https://apps-apis.google.com/a/feeds/emailsettings/2.0/';
      var fetchArgs = googleOAuth_('emailSetting',base);
      fetchArgs.method = 'GET';
      var domain = UserManager.getDomain();
      var url = base+domain+'/'+user+'/signature?alt=json';
      var urlFetch = UrlFetchApp.fetch(url, fetchArgs);
      var jsonString = urlFetch.getContentText();
      var jsonArray = Utilities.jsonParse(jsonString).entry.apps$property;
      var ob = {};
      ob.user = user;
      for(var i in jsonArray){
        ob[jsonArray[i].name] = jsonArray[i].value;
      }
      return ob;
    }
    //Google oAuthConfig.. 
    function googleOAuth_(name,scope) {
      var oAuthConfig = UrlFetchApp.addOAuthService(name);
      oAuthConfig.getAccessTokenUrl()
      oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
      oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
      oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
      oAuthConfig.setConsumerKey("xxxxxxxxxxxx.apps.googleusercontent.com");
      oAuthConfig.setConsumerSecret("xxxxxxxx-xxxxxx-xxxxx");
      return {oAuthServiceName:name, oAuthUseToken:"always"};
    }


    //This function will escape '<' and '>' characters from a HTML string
    function htmlEncode(str){
      str = str.replace(/</g,'&lt;');
      return str.replace(/>/g,'&gt;')
    }

获取oAuthConfig.setConsumerKey和oAuthConfig.setConsumerSecret我在google开发者控制台中创建了一个新项目,修改为Admin SDK API状态,为本机应用程序创建了一个&#34;客户端ID&#34;并在setConsuperKey中使用CLIENT ID,在setConsumerSecret中使用CLIENT SECRET。

执行脚本updateSignature test@xxxx.it' s签名应该改变, 我可以看到盒子&#34;需要自动化&#34; clik ok,并出现请求访问框, 我点击&#34;授予访问权限#34;但没有任何事情发生,也没有出现任何错误。

在调试模式下执行相同的功能,我有相同的框和一个带有&#34; Errore OAuth&#34;的红框。最后。

我做错了什么......请帮我找错!

再次感谢。

1 个答案:

答案 0 :(得分:0)

最后我找到了线索!!

感谢mike&#39; quastions and answers

让我发现This example

我终于明白了!!

  • consumerkey 中,您必须设置您的域名(p.e。&#34; mydomain.it&#34;,
  • consumerSecret 中,您必须将客户的&#34; 机密数据设置为OAuth:&#34;来自admin google console-&gt; secority-&gt;高级设置 - &gt;管理此域的OAuth密钥和密码。

我对谷歌开发者控制台中的密钥感到困惑,可能这个答案可以帮助