如何在 Google 脚本中编写用于 Facebook 身份验证的应用程序机密和令牌,而无需脚本中的凭据?

How to code in app secrets and tokens for Facebook authentication in Google Scripts without having the credentials in the script?

我有一个可以从 Facebook oAuth 成功获取的脚本 API:

function getToken() {
  var appId = "XXXXXX"; 
  var clientSecret = "XXXXXXXXXXXX";
  var url = "https://graph.facebook.com/oauth/access_token?client_id="+appId+"&client_secret="+clientSecret+"&grant_type=client_credentials";
  var response = UrlFetchApp.fetch(url);
  var queryResult = response.getContentText(); 
  var token = queryResult.slice(13);
  return(token);
}

问题是,我不想在我的脚本主体中包含我的 appId 和 clientSecret,所以有没有一种方法可以让我在没有纯文本凭据的情况下编写代码?

为此,您需要安装最新的 facebook SDK,它使用命名空间和受保护的方法来使用图形 api 获取 facebook 数据。下面是我处理的一个例子:

require_once ROOT . '/vendor/Facebook/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;
class FacebookComponent extends Component
{
    public $app_id;
    public $app_secret;
    public $default_graph_version;

    public function __construct()
    {
    $this->app_id = "XXXXXXXXXXXXXXX";
    $this->app_secret = "XXXXXXXXXXXXXXXXXXXXX";
    $this->default_graph_version = "v2.5"; // For Offerz-develop app

    }
    public function getFacebookConn(){
    $app_id = $this->app_id;
    $app_secret = $this->app_secret;
    $fb = new \Facebook\Facebook([
        'app_id' => $app_id,
        'app_secret' => $app_secret,
        'default_graph_version' => 'v2.5',
    ]);
    return $fb;

    }
    }

将密钥和机密作为 "Script Property"(文件 > 项目属性 > 脚本属性)手动输入脚本编辑器,然后使用 Properties Service.[=14= 在代码中访问它们]

例如您可以手动添加:

property:APP_ID, value:'XXXXXXXX'

然后在代码中使用

访问它
var appId = PropertiesService.getScriptProperties().getProperty('APP_ID')

如果您想在 Github 之类的地方共享脚本,或者如果您只授予对脚本的查看权限,在这种情况下脚本属性不可见(您不应该能够在 this script 中看到 SP)。如果您授予其他人编辑权限,他们将能够看到 SP,但您可以使用用户属性。