Gdata JavaScript Authsub продолжает перенаправление - PullRequest
5 голосов
/ 07 мая 2010

Я использую JavaScript API данных Google и у меня возникают проблемы с корректной работой скрипта AuthSub.На данный момент это мой скрипт:

google.load('gdata', '1');

function getCookie(c_name){
    if(document.cookie.length>0){
        c_start=document.cookie.indexOf(c_name + "=");
        if(c_start!=-1){
            c_start=c_start + c_name.length+1;
            c_end=document.cookie.indexOf(";",c_start);
            if(c_end==-1) c_end=document.cookie.length;
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
}

function main(){
    var scope = 'http://www.google.com/calendar/feeds/';
    if(!google.accounts.user.checkLogin(scope)){
        google.accounts.user.login();
    } else {
        /*
        * Retrieve all calendars
        */

        // Create the calendar service object
        var calendarService = new google.gdata.calendar.CalendarService('GoogleInc-jsguide-1.0');

        // The default "allcalendars" feed is used to retrieve a list of all
        // calendars (primary, secondary and subscribed) of the logged-in user
        var feedUri = 'http://www.google.com/calendar/feeds/default/allcalendars/full';

        // The callback method that will be called when getAllCalendarsFeed() returns feed data
        var callback = function(result) {

          // Obtain the array of CalendarEntry
          var entries = result.feed.entry;

          //for (var i = 0; i < entries.length; i++) {
            var calendarEntry = entries[0];
            var calendarTitle = calendarEntry.getTitle().getText();
            alert('Calendar title = ' + calendarTitle);
          //}
        }

        // Error handler to be invoked when getAllCalendarsFeed() produces an error
        var handleError = function(error) {
          alert(error);
        }

        // Submit the request using the calendar service object
        calendarService.getAllCalendarsFeed(feedUri, callback, handleError);
    }
}

google.setOnLoadCallback(main);

Однако, когда я запускаю эту страницу, страница перенаправляет меня на страницу аутентификации.После проверки подлинности отправьте меня обратно на мою страницу, а затем снова быстро отправьте на страницу проверки подлинности.Я включил оповещения, чтобы проверить, установлен ли токен и, кажется, он не работает.У кого-нибудь есть такая проблема?

Ответы [ 4 ]

2 голосов
/ 04 апреля 2011

У меня была такая же проблема, поэтому я построил эту функцию

function login() {
    var scope = "http://www.google.com/calendar/feeds/";
    if(!google.accounts.user.checkLogin(scope)) {
        if(google.accounts.user.getStatus() == 0) {
            var token = google.accounts.user.login();
        }
    }
}

Я добавил проверку в google.accounts.user.getStatus (), если значение 1 означает, что приложение находится в процессе входа, а если значение 2 означает, что приложения вошли в систему. Вы также можете передать область в метод getStatus.

1 голос
/ 21 декабря 2010

проблема в том, что настройка куки занимает немного времени, когда Google перенаправляет обратно на ваш сайт. Однако обратный вызов запускается немедленно, и к тому времени нет файла cookie для проверки подлинности, поэтому он снова перенаправляет обратно в Google. Попробуйте использовать setTimeout или что-то еще, чтобы через несколько секунд запустить проверку подлинности, чтобы быть уверенным.

0 голосов
/ 12 января 2011

Иногда вы можете получить в своем браузере файл cookie orphaned, который будет постоянно возвращаться в Google.

То, что я делаю сейчас, выполняет checkLogin до того, как я выполню свой вход в систему, и если он вернет true, я явно вызову logOut().

. Вызов logOut удалит все куки, которыеGoogle отклонил, но оставил в вашем браузере.Причина, по которой он продолжает работать в цикле, заключается в том, что cookie существует, но даже при повторном использовании он не создает новый, потому что он у вас уже есть.Но, к сожалению, ради нас, тот, кто там, недействителен.

0 голосов
/ 29 декабря 2010

Вы также должны передать область видимости методу входа в систему.

...