Как получить Google UserId из активного сеанса пользователя в App Maker? - PullRequest
0 голосов
/ 16 сентября 2018

Есть ли способ получить «Идентификатор пользователя Google» из сеанса в App Maker. В документации только упоминается, как получить электронную почту зарегистрированного пользователя Session.getActiveUser().getEmail(), но нигде не сказано, как получить идентификатор. Мне это нужно, потому что электронная почта пользователя может иногда меняться. Поэтому мне нужен идентификатор пользователя для отслеживания пользователей и связанных задач разрешения. Или я что-то упускаю из-за того, как это должно быть реализовано.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Член команды понял это.Это должно быть сделано с помощью Apps Script - который работает в среде 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"; не будет вызываться асинхронно, потому что это уже происходит на сервере.

0 голосов
/ 05 ноября 2018

Еще проще найти Google Id, просто используя модель Справочника . Хотя в документации упоминается, что существует способ получить текущий подписанный идентификатор пользователя (то есть Google 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. Затем связать эту модель с другими моделями, где вы хотите отслеживать данные, связанные с пользователем, потому что, к сожалению, мы не можем напрямую связать модель каталога с другими моделями.

0 голосов
/ 17 сентября 2018

Это дуплекс из этого вопроса ?

Я думаю, что это решит вашу проблему, хотя это немного хак.

...