减少身份验证请求

你好,世界

我正在使用google-api-nodejs-client制作一些 node.js 脚本

这是与 api 交互的基本身份验证请求:

const { google } = require("googleapis");
const auth = new google.auth.GoogleAuth({
  keyFile: "credentials.json",
  scopes: "https://www.googleapis.com/auth/spreadsheets",
});
const getAuthClient = async () => {
  try {
    return await auth.getClient();
  } catch (error) {
    console.error(error);
  }
};

const sheetsClient = async () => {
  const client = await getAuthClient();
  return await google.sheets({ version: "v4", auth: client });
};

module.exports = { sheetsClient };

现在,每当我创建一个需要使用的函数时,sheetsClient我都需要像这样设置它(下面的示例是通用示例,我将对 api 进行其他调用,我需要在其中获取工作表客户端。在某些情况下我需要在一个接一个调用的不同函数中读取(获取客户端)和写入(再次获取客户端):

const { google } = require("googleapis");
const { sheetsClient } = require("./googleAuth");

const createSheet = async (name) => {
    const client = await sheetsClient();
    const sheet = await client.spreadsheets.create({
        resource: {
            properties: {
                title,
            },
        },
    });
};

const updateSheet = async (name) => {
    const client = await sheetsClient();
    const sheet = await client.spreadsheets.update({
        resource: {
            properties: {
                title,
            },
        },
    });
};

const deleteSheet = async (name) => {
    const client = await sheetsClient();
    const sheet = await client.spreadsheets.delete({
        resource: {
            properties: {
                title,
            },
        },
    });
};

有没有更好的方法来访问客户端而不必每次在函数中调用它?

拉斐尔小

有很多可能性。

  1. 最简单的方法可能是在所有函数之外只调用一次。
const { google } = require("googleapis");
const { sheetsClient } = require("./googleAuth");

// globally defined
const client = ( async () => await sheetsClient())();

// rest of code
const createSheet = async (name) => {

    // deleted : const client = await sheetsClient();

    const sheet = await client.spreadsheets.create({
        resource: {
            properties: {
                title,
            },
        },
    });
};

这将在此 js 文件中创建一个全局客户端变量。那么你可以从每个函数中删除它的声明。

代码仍然可以顺利运行,但只有一个身份验证。

  1. 解决您的问题的另一种方法是通过使用标志确保 auth 函数确实只执行一次。(此解决方案与记忆化有关)
var client = null;
const getAuthClient = async () => {
  if (client) return client;

  try {
    client = await auth.getClient();
    return client;
  } catch (error) {
    console.error(error);
  }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何最大程度地减少对Sheets附加组件的身份验证请求

允许应用请求身份验证

RADIUS忽略对身份验证地址的请求

Samba 公共共享请求身份验证

向选项请求添加身份验证

Python请求-身份验证令牌

请求的身份验证范围不足 javascript

Twitter API [1.1] 身份验证请求 —

TraefIk 转发身份验证请求 URI

在 getStaticProps 请求中处理身份验证

减少对外部API的身份验证调用(Laravel 5.6)

Walmart.io 身份验证问题 - 无法对请求中的身份验证签名进行身份验证

使用 POST 请求的身份验证无法验证数据

外部身份验证提供程序和对 RESTful API 的请求进行身份验证

护照的身份验证功能如何知道要进行身份验证的请求?

Owin身份验证-如何获取请求身份验证令牌的客户端的IP地址

Firebase-身份验证自定义令牌错误身份验证/网络请求失败

如何使用令牌身份验证对 Post 请求进行身份验证?

请求缺少身份验证密钥。请参阅 IHttpClientFactory 的“身份验证”部分

Microsoft 身份验证请求使用访问令牌的附加范围

为什么 dio 身份验证的请求不起作用?

在vue中处理axios请求返回的身份验证页面

Firebase功能HTTP请求为经过身份验证的用户

请求访问令牌时 Owin 未通过身份验证

OpenConnect:执行身份验证请求时传递用户密码?

在shibboleth SP中签名身份验证请求

卷曲请求列出计划时身份验证失败

该请求缺少身份验证密钥FCM令牌

Napster API 身份验证 - 错误请求/未经授权