Google app maker 如何从AppMaker中的活动用户会话获取Google用户ID?

Google app maker 如何从AppMaker中的活动用户会话获取Google用户ID?,google-app-maker,Google App Maker,是否有办法从AppMaker中的会话中获取“用户Google Id”。在文档中,它只提到如何检索登录用户的电子邮件Session.getActiveUser().getEmail(),但没有提到如何获取id。我需要这个,因为用户电子邮件有时可能会更改。因此,我需要用户id来跟踪用户和相关的权限任务。或者在如何实现这一点上我遗漏了什么 这是重复的吗 我认为这会解决你的问题,尽管这有点麻烦。这是一个骗局吗 我认为这将解决您的问题,尽管这有点困难。一位团队成员已经解决了这个问题。这应该使用应用程序脚本

是否有办法从AppMaker中的会话中获取“用户Google Id”。在文档中,它只提到如何检索登录用户的电子邮件
Session.getActiveUser().getEmail()
,但没有提到如何获取id。我需要这个,因为用户电子邮件有时可能会更改。因此,我需要用户id来跟踪用户和相关的权限任务。或者在如何实现这一点上我遗漏了什么

这是重复的吗

我认为这会解决你的问题,尽管这有点麻烦。

这是一个骗局吗


我认为这将解决您的问题,尽管这有点困难。

一位团队成员已经解决了这个问题。这应该使用应用程序脚本来完成,该脚本使用服务器端脚本在AppMaker环境中工作

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 apirl=”https://www.googleapis.com/admin/directory/v1/users/“+电子邮件+”?字段=id”不会被异步调用,因为它已经在服务器中发生。

一个团队成员已经解决了这个问题。这应该使用应用程序脚本来完成,该脚本使用服务器端脚本在AppMaker环境中工作

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 apirl=”https://www.googleapis.com/admin/directory/v1/users/“+电子邮件+”?字段=id”
不会被异步调用,因为它已经在服务器中发生。

这是一种更简单的查找Google Id的方法,只需使用。尽管文档中提到有一种方法可以获取当前登录用户id(即Google id),但它并没有明确说明如何改进文档。另一个问题是,在许多情况下,当前活动用户的电子邮件被称为id,例如在不推荐使用的方法
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,您可以安全地将不同的模型相互关联起来,而不必担心如果更改了已引用的用户电子邮件,数据库完整性可能会中断


只需创建一个作为目录模型包装器的模型并在其中存储GoogleId,就可以将不同的模型关联起来。然后将该模型链接到您希望跟踪用户相关数据的其他模型,因为不幸的是,我们无法直接将目录模型链接到其他模型。

这是一种简单地使用。尽管文档中提到有一种方法可以获取当前登录用户id(即Google id),但它并没有明确说明如何改进文档。另一个问题是,在许多情况下,当前活动用户的电子邮件被称为id,例如在不推荐使用的方法
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,您可以安全地将不同的模型相互关联起来,而不必担心如果更改了已引用的用户电子邮件,数据库完整性可能会中断


只需创建一个作为目录模型包装器的模型并在其中存储GoogleId,就可以将不同的模型关联起来。然后将该模型链接到您希望跟踪用户相关数据的其他模型,因为很遗憾,我们无法将目录模型直接链接到其他模型。

感谢您提及此帖子,但它已经过时。我已经发布了最新的解决方案。谢谢你提到这篇文章,但它已经过时了。我已经发布了更新的解决方案。