Обработка нескольких учетных записей Gmail - PullRequest
0 голосов
/ 24 апреля 2019

Я использую Google Calendar JavaScript API. Он отлично работает для одной учетной записи. Проблема в том, что пользователь вошел в две из моих учетных записей gmail. Каждый раз пользователь запрашивает, какую учетную запись пользователь хочет использовать.

Я хочу, чтобы API запомнил мой последний выбор, по крайней мере, для сеанса или наиболее предпочтительно, пока пользователь сам не отключится.

Это мой файл JS.

var clientId = $("#CalendarClientId").val();


var scopes = 'https://www.googleapis.com/auth/calendar';
var objEventList = [];
var calendarIdAtt;

function InitilizeCalendarAPI() {
    // Step 2: Reference the API key
    window.setTimeout(checkAuth, 5);
}
function CheckGoogleCalAuth() {
    
    gapi.auth.authorize({ client_id: clientId, scope: scopes }, HandleAuthCallBack);
}
function checkAuth() {
    gapi.auth.authorize({ client_id: clientId, scope: scopes }, HandelCalAuthResult);
}
function CheckAuthentication() {
    gapi.auth.checkSessionState({ client_id: clientId }, CheckAuthCallback);
}
function CheckAuthCallback(loginDataCallback) {
    
    if (loginDataCallback == false) {
        
        checkAuth();
        $("#googleAuthorize-Button").hide();
    }
}
function HandelCalAuthResult(authResult) {
    if (authResult && !authResult.error) {
        /*authorizeButton.style.visibility = 'hidden';*/
        $("#googleAuthorize-Button").hide();
        if ($("#googleConnected").length > 0) {
            $("#googleConnected").show();
        }
        /*bind listing of google calendar name in addevent page*/
        if ($("#divGoogleCalendarNameList").length > 0) {
            GetListOfCalendarNameFromGoogle();
        }
    } else {
        $("#googleAuthorize-Button").show();
        /*authorizeButton.style.visibility = '';*/
        if ($("#googleConnected").length > 0) {
            $("#googleConnected").hide();
        }
    }
    if ($('#googleAuthorized-Button').length > 0) {
        $("#googleAuthorize-Button").hide();
        $('#googleAuthorized-Button').show();
        $('#calenderSettingIcon').attr('data-original-title', 'Connected To Google');
    }
}

function CheckAutheForEventList() {
    
    gapi.auth.checkSessionState({ client_id: clientId }, CheckAuthCallbackListEvent);
}

function CheckAuthCallbackListEvent(loginDataCallback)
{
     gapi.auth.authorize({ client_id: clientId, scope: scopes }, LoadEventListinAPI);
}

function checkAuthEventList() {
    ConfirmConnectionToGoogleCalendar(function (isConnect) {        
            if (isConnect) {
                gapi.auth.authorize({ client_id: clientId, scope: scopes },             LoadEventListinAPI);
            }
        });
}

function LoadEventListinAPI() {
    
    gapi.client.load('calendar', 'v3', GetAllCalendar);
}

function GetAllCalendar() {
    gapi.client.load('calendar', 'v3', GetCalendarAndTheirEvents);
}

function GetCalendarAndTheirEvents() {
    
    objEventList = [];
    try {        
        var objDate = GetMinAndMaxDate();
        var finalMinDate = (objDate.MinDate).toISOString();;
        var finalMaxDate = (objDate.MaxDate).toISOString();;

        var request = gapi.client.calendar.calendarList.list();        
        var tempCount = 0;
        request.execute(function (resp) {
            
            var calLength = resp.items.length;
            $.each(resp.items, function (index, item) {
                if (item.accessRole == "owner") {
                    try {
                        calendarIdAtt = item.id;
                        var request = gapi.client.calendar.events.list({
                            'calendarId': item.id,
                            'showDeleted': false,
                            'singleEvents': true,
                            'orderBy': 'startTime',
                            'maxResults': 100,
                            'timeMin': finalMinDate,
                            'timeMax': finalMaxDate
                        });

                        request.execute(function (resp) {
                            tempCount = tempCount + 1;
                            var events = resp.items;
                            if (events.length > 0) {
                                objEventList.push(events);
                            }
                            if (tempCount == calLength) {
                                //Binding Kendo Scheduler with Google Calenda Events
                                var eventsList = BindEventToCalendar();
                                LoadEventsScheduler(eventsList);
                            }
                        });
                    }
                    catch (error) {
                        tempCount = tempCount + 1;
                        if (tempCount == calLength) {
                            BindEventToCalendar();
                        }
                    }
                }
                else {
                    tempCount = tempCount + 1;
                    if (tempCount == calLength) {
                        BindEventToCalendar();
                    }
                }
            });
        });
        return objEventList;
    }
    catch (exception) {
        BindEventToCalendar();
        return null;
    }
}

//Function will display google calendar events in the Kendo Scheduler
function LoadEventsScheduler(eventsList) {
    
    //This will retrun all the google calendar events to the server side for the scheduler
    var request = {
        EventsList: eventsList, CalendarAccount: calendarIdAtt
    };
    $.ajax({
        type: "POST",
        data: JSON.stringify(request),
        url: $_SetEventScheduler,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            var data;
            if (msg.hasOwnProperty("d")) {
                data = msg.d;
            }
            else
                data = msg;
            if (data.success) {
                $("#scheduler").data("kendoScheduler").dataSource.read();
            }
            else {

            }
        }
    });
}

Я заметил, что API показывает, что я вошел в систему, но календарь не сохраняется в случае нескольких учетных записей, поэтому он снова просит меня выбрать учетную запись.

Summery: Я хочу сохранить полный сценарий (может быть calendar_id или любой уникальный идентификатор), который может сообщить API, какую учетную запись и какой календарь следует выбрать.

Если вам нужна дополнительная информация,пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...