Log*_*phy 4 javascript google-data-studio
我在为我的 datastudio 连接器设置“USER_PASS”类型的身份验证时遇到了一些麻烦,并且很难找到足够的示例(官方文档提供了部分图片)。有没有人以前设置过这个,你能和我分享一下你是如何配置它的吗?如果有人有一个例子的链接,这将是一个很大的帮助,谢谢!
哦,我是如何知道并分享找到足够例子的痛苦的。@diminishedprime提到的kaggle 连接器实际上也在使用我发现的工作。这是一个删节的例子,我希望对你有帮助。
基本上,您将需要综合考虑。第一个是实现getAuthType()来告诉数据洞察它可能需要显示这样的掩码:
function getAuthType() {
return {
type: 'USER_PASS'
};
};
Run Code Online (Sandbox Code Playgroud)
然后,因为您使用的是USER_PASS,Data Studio 会调用isAuthValid()并期望它返回一个Boolean. 每次您处于使用连接器的数据源配置的第一页时,都会调用此函数。如果它返回false,将显示这样的掩码:
但是如果返回true,则跳过这一步。
但你可能会问,这背后的逻辑是什么?我自己和kaggle 连接器正在使用UserProperties来保留使用此数据源的用户名/密码。您可以检查是否存在正确的凭据并通过您的 REST 端点对其进行身份验证,然后Boolean根据此返回您的凭据。它可能看起来像这样:
function isAuthValid() {
const usernameAndPassword = loadUsernameAndPassword();
return usernameAndPassword.username && usernameAndPassword.password && validateCredentials(usernameAndPassword.username, usernameAndPassword.password)
};
Run Code Online (Sandbox Code Playgroud)
loadCurrentUsernameAndPassword()只需从UserProperties加载它们:
function loadCurrentUsernameAndPassword() {
const properties = PropertiesService.getUserProperties();
return {
username: properties.getProperty('dscc.username'),
password: properties.getProperty('dscc.password')
}
};
Run Code Online (Sandbox Code Playgroud)
validateCredentials() 下面进一步解释。
当用户输入他的用户名/密码并单击Send -Button(我假设这就是它的英文名称)时,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"
};
}
};
Run Code Online (Sandbox Code Playgroud)
如您所见,我引入了 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;
}
Run Code Online (Sandbox Code Playgroud)
第二个新函数storeUsernameAndPassword()将用户名/密码存储到UserProperties 中:
function storeUsernameAndPassword(username, password) {
PropertiesService
.getUserProperties()
.setProperty('dscc.username', username)
.setProperty('dscc.password', password);
};
Run Code Online (Sandbox Code Playgroud)
现在您在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 ...
}
Run Code Online (Sandbox Code Playgroud)
现在,这种方法存在一个问题,目前无法解决。该UserProperties不会被永远清除。因此,理论上,无需破解,用户名/密码组合,一旦由用户键入并验证并存储到 UserProperties 中,就会永远存在。根据社区连接器 API 参考,我们可以实现resetAuth(),其中可以从 UserProperties 中删除此信息,但似乎 resetAuth() 目前从未被调用过。我已经在这里开始讨论这个问题。
在https://developers.google.com/datastudio/connector/auth也有一些解释
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |