gpt4 book ai didi

javascript - 将 "USER_PASS"与 datastudio 连接器一起使用

转载 作者:行者123 更新时间:2023-12-01 15:55:55 26 4
gpt4 key购买 nike

我在为我的 datastudio 连接器设置“USER_PASS”类型的身份验证时遇到了一些麻烦,并且很难找到足够的示例(官方文档提供了部分图片)。以前有没有人设置过这个,你能和我分享一下你是如何配置它的吗?如果有人有一个例子的链接,那将是一个很大的帮助,谢谢!

最佳答案

哦,我是如何知道并分担找到足够示例的痛苦的.. kaggle connector @diminishedprime 提到的实际上也在使用我发现的工作。这是一个精简的例子,希望对你有所帮助。

基本上你将需要一些东西的组合。第一个是实现 getAuthType()告诉 Data Studio 它可能需要显示这样的掩码:

function getAuthType() {      
return {
type: 'USER_PASS'
};
};

然后,因为您使用的是 USER_PASS ,Data Studio 调用 isAuthValid()并期望它返回 Boolean .每次您在使用连接器的数据源的配置的第一页上,都会调用此函数。如果返回 false ,将显示这样的掩码:

Authenticate using <code>USER_PASS</code>

但如果它返回 true ,这一步会被跳过。

但你可能会问,这背后的逻辑是什么?我本人和 kaggle connector正在使用 UserProperties保留使用此数据源的用户名/密码。您可以检查是否存在正确的凭据并通过您的 REST 端点对其进行身份验证并返回您的 Boolean根据这个。它可能看起来像这样:
function isAuthValid() {
const usernameAndPassword = loadUsernameAndPassword();
return usernameAndPassword.username && usernameAndPassword.password && validateCredentials(usernameAndPassword.username, usernameAndPassword.password)
};
loadCurrentUsernameAndPassword()只需从 UserProperties 加载它们:
function loadCurrentUsernameAndPassword() {
const properties = PropertiesService.getUserProperties();
return {
username: properties.getProperty('dscc.username'),
password: properties.getProperty('dscc.password')
}
};
validateCredentials()下面进一步解释。

当用户键入他的用户名/密码并单击发送按钮(我假设这就是它的英文名称)时,Data Studio 然后调用 setCredentials() ,您将需要实现。
您可能需要调用 REST 端点,发送用户名/密码并处理回复。它可能看起来像这样:
function setCredentials(request) {
var isCredentialsValid = validateCredentials(request.userPass.username, request.userPass.password);
if (!isCredentialsValid) {
return {
errorCode: "INVALID_CREDENTIALS"
};
} else {
storeUsernameAndPassword(request.userPass.username, request.userPass.password);
return {
errorCode: "NONE"
};
}
};

如您所见,我引入了 2 个新功能。

第一个新功能 validateCredentials()实际上使用 UrlFetchApp 将凭据发送到 REST 端点:
function validateCredentials(username, password) {
var rawResponse = UrlFetchApp.fetch('path/to/your/authentication/endpoint', {
method: 'GET',
headers: {
'Authorization': 'Basic ' + Utilities.base64Encode(username + ':' + password)
},
muteHttpExceptions: true
});

return rawResponse.getResponseCode() === 200;
}

第二个新功能 storeUsernameAndPassword()将用户名/密码存储到 UserProperties :
function storeUsernameAndPassword(username, password) {
PropertiesService
.getUserProperties()
.setProperty('dscc.username', username)
.setProperty('dscc.password', password);
};

现在您有一个有效的用户名和密码存储在 UserProperties 中。您可以在 Data Studio 调用 getData() 时将其发送到您的 REST 端点.例如像这样:
function getData(request) {
const usernameAndPassword = loadUsernameAndPassword();

var rawResponse = UrlFetchApp.fetch('path/to/your/data/endpoint?foo=bar', {
method: 'GET',
headers: {
'Authorization': 'Basic ' + Utilities.base64Encode(usernameAndPassword.username + ':' + usernameAndPassword.password)
}
});

// transform your rawResponse ...
}

现在,这种方法存在一个问题,目前无法解决。 UserProperties永远不会被清除。所以理论上,用户名/密码组合一旦被用户输入和验证并存储到 UserProperties 中,就永远存在。根据社区连接器 API 引用,我们可以实现 resetAuth()可以从 UserProperties 中删除此信息,但似乎 resetAuth() 目前从未被调用过。我已经开始讨论这个问题 here .

https://developers.google.com/datastudio/connector/auth 上也有所解释。

关于javascript - 将 "USER_PASS"与 datastudio 连接器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com