有没有办法从App Maker的会话中获取"User Google Id" . 在文档中,它只提到了如何检索登录用户 Session.getActiveUser().getEmail() 的电子邮件,但没有提到如何获取id . 我需要这个,因为用户电子邮件有时会发生变化 . 所以我需要用户ID来跟踪用户和相关的权限任务 . 或者我在这里应该如何实现这一点 .
Session.getActiveUser().getEmail()
团队成员已经弄明白了 . 这应该使用Apps脚本完成 - 它可以使用服务器端脚本在App Maker环境中运行 .
var GoogleUser = (function (){ /** * * @param {string} email */ function getUserObjByEmail(email){ // Same as using AdminDirectory class. var apiUrl = "https://www.googleapis.com/admin/directory/v1/users/"+email+"?fields=id"; var token = ScriptApp.getOAuthToken(); var header = {"Authorization":"Bearer " + token}; var options = { "method": "GET", "headers": header }; var response = JSON.parse(UrlFetchApp.fetch(apiUrl, options)); return response; } /** * * @param {string} email - User email. */ function getIdByEmail(email){ return getUserObjByEmail(email)['id']; } var publicApi = { getIdByEmail: getIdByEmail }; return publicApi; })();
请注意,使用 var apiUrl = "https://www.googleapis.com/admin/directory/v1/users/"+email+"?fields=id"; 不会被异步调用,因为它已经在服务器中发生 .
var apiUrl = "https://www.googleapis.com/admin/directory/v1/users/"+email+"?fields=id";
然而,只需使用the Directory model即可轻松找到Google ID . 虽然它在文档中提到有一种方法可以获得当前用户ID(这是Google Id)的签名,但是没有明确说明如何 - 也许这里可以改进文档 . 另一个问题是,在许多情况下,当前活动用户的电子邮件被称为id,例如在弃用方法 Session.getActiveUser().getUserLoginId() 中 . 无论如何,这是获得身份证的正确方法 .
Session.getActiveUser().getUserLoginId()
var query = app.models.Directory.newQuery(); query.filters.PrimaryEmail._equals = Session.getActiveUser().getEmail(); var result = query.run(); var GoogleId = result[0]._key;
因此,使用此GoogleId,您可以安全地将不同的模型相互关联,而不必担心如果已经引用的用户电子邮件发生更改,数据库完整性可能会中断 .
只需创建一个模型作为围绕Directory模型的包装模型并将GoogleId存储在其中,就可以完成不同模型的关联 . 然后将该模型链接到您要跟踪用户相关数据的其他模型,因为遗憾的是我们无法直接将目录模型链接到其他模型 .
这是this question的重复吗?
我认为这将解决你的问题,即使它有点像黑客 .
3 回答
团队成员已经弄明白了 . 这应该使用Apps脚本完成 - 它可以使用服务器端脚本在App Maker环境中运行 .
请注意,使用
var apiUrl = "https://www.googleapis.com/admin/directory/v1/users/"+email+"?fields=id";
不会被异步调用,因为它已经在服务器中发生 .然而,只需使用the Directory model即可轻松找到Google ID . 虽然它在文档中提到有一种方法可以获得当前用户ID(这是Google Id)的签名,但是没有明确说明如何 - 也许这里可以改进文档 . 另一个问题是,在许多情况下,当前活动用户的电子邮件被称为id,例如在弃用方法
Session.getActiveUser().getUserLoginId()
中 . 无论如何,这是获得身份证的正确方法 .因此,使用此GoogleId,您可以安全地将不同的模型相互关联,而不必担心如果已经引用的用户电子邮件发生更改,数据库完整性可能会中断 .
只需创建一个模型作为围绕Directory模型的包装模型并将GoogleId存储在其中,就可以完成不同模型的关联 . 然后将该模型链接到您要跟踪用户相关数据的其他模型,因为遗憾的是我们无法直接将目录模型链接到其他模型 .
这是this question的重复吗?
我认为这将解决你的问题,即使它有点像黑客 .