首页 文章

如何从App Maker中的活动用户会话中获取Google UserId?

提问于
浏览
0

有没有办法从App Maker的会话中获取"User Google Id" . 在文档中,它只提到了如何检索登录用户 Session.getActiveUser().getEmail() 的电子邮件,但没有提到如何获取id . 我需要这个,因为用户电子邮件有时会发生变化 . 所以我需要用户ID来跟踪用户和相关的权限任务 . 或者我在这里应该如何实现这一点 .

3 回答

  • 0

    团队成员已经弄明白了 . 这应该使用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

    然而,只需使用the Directory model即可轻松找到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,您可以安全地将不同的模型相互关联,而不必担心如果已经引用的用户电子邮件发生更改,数据库完整性可能会中断 .

    只需创建一个模型作为围绕Directory模型的包装模型并将GoogleId存储在其中,就可以完成不同模型的关联 . 然后将该模型链接到您要跟踪用户相关数据的其他模型,因为遗憾的是我们无法直接将目录模型链接到其他模型 .

  • 1

    这是this question的重复吗?

    我认为这将解决你的问题,即使它有点像黑客 .

相关问题