是否可以从App Maker的会话中获取“用户Google ID”。在文档中,它仅提到了如何检索已登录用户Session.getActiveUser().getEmail()
的电子邮件,但没有在其中说明如何获取ID。我需要这样做,因为用户电子邮件有时可能会更改。因此,我需要用户ID来跟踪用户和相关的权限任务。还是我在这里缺少应该如何实现的东西。
答案 0 :(得分:1)
一个团队成员已经解决了。这应该使用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";
不会被异步调用,因为它已经在服务器中发生了。
答案 1 :(得分:1)
但是,只需使用the Directory model即可更轻松地找到Google ID。尽管在文档中提到了可以获取当前登录的用户ID(即Google Id)的方法,但并未明确说明如何-也许可以在此处改进文档。另一个问题是,在许多情况下,例如,在不赞成使用的方法Session.getActiveUser().getUserLoginId()
中,当前活动用户的电子邮件称为id。无论如何,这是获取ID的正确方法。
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存储在其中的模型,就可以完成不同模型的关联。然后将该模型链接到要跟踪用户相关数据的其他模型,因为很遗憾,我们无法将目录模型直接链接到其他模型。
答案 2 :(得分:0)
这是this question的重复吗?
我认为这可以解决您的问题,即使有点麻烦。