5

我正在使用 JavaScript Google Data API,但在使 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

4 回答 4

2

我遇到了同样的问题,所以我构建了这个函数

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方法。

于 2011-04-04T04:49:36.113 回答
1

问题是当 google 重定向回您的网站时,设置 cookie 需要一些时间。但是,回调会立即运行,并且到那时还没有 cookie 来验证身份验证,因此它再次重定向回 google。尝试使用 setTimeout 或其他东西在一秒钟左右后运行身份验证检查以确保。

于 2010-12-21T20:49:11.043 回答
0

您也应该将范围传递给登录方法。

于 2010-12-29T03:06:03.010 回答
0

有时您orphaned的浏览器中可能会出现一个 cookie,这会不断反馈给 Google。

我现在正在做的是在执行登录调用之前执行 checkLogin,如果它返回 true,我会显式调用logOut().

logOut 调用将删除任何被 Google 拒绝但留在浏览器中的 cookie。它似乎继续循环的原因是因为 cookie 在那里,但即使在 reauth 时,它也不会产生一个新的,因为你已经有了一个。但不幸的是,为我们着想,那里的那个是无效的。

于 2011-01-12T05:51:54.947 回答