如何在不在线公开文件的情况下将文件存储在 Wordpress 插件中?

How to store a file in a Wordpress Plugin without exposing it online?

我正在开发一个 Wordpress 插件,它通过 Google 服务帐户与 Google 日历 API 对话。

此类服务帐户带有一个 JSON 文件,其中包含其 OAuth2 凭据(例如 client_idpublic keyprivate key)。

为了让其他人使用该插件,我需要他们在插件中上传自己的 JSON 凭据文件。这样插件就可以与 Google API 和 access/modify 他们的个人日历对话。

事情是这样的:

Wordpress 插件文件不受保护,可以公开访问。如何在插件中存储 JSON 文件,而不暴露其包含的凭据?

"Hey man, you can save JSON in the database..."

我知道,但是 Google 的 API 客户端需要一个字符串到凭证文件,而不是直接 JSON:

$client = new Google\Client();
$client->setAuthConfig('./credentials.json');

Google 似乎没有很好地记录这一点,但看起来 setAuthConfig 也可以采用数组而不是字符串。因此,您应该能够允许用户将 JSON 存储在数据库中,然后自己 json_decode 并将其传递给 setAuthConfig.

// retrieve $jsonString from database somehow
$configArray = json_decode($jsonString, true);
$client->setAuthConfig($configArray);

请注意,json_decode 需要将第二个参数设置为 true,以便它解码为关联数组,这正是 Google 库所需要的。

(如果您很好奇,可以在此处查看 setAuthConfig 代码:https://github.com/googleapis/google-api-php-client/blob/81696e6206322e38c643cfcc96c4494ccfef8a32/src/Client.php#L956 注意它如何检查 $config 是否为字符串,如果不是, 就直接用了。另外,函数上面的注释中提到 $config 可以是一个数组。)