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 などを使用して、1 秒ほど後に認証チェックを実行してみてください。

于 2010-12-21T20:49:11.043 に答える
0

orphanedブラウザに Cookie が残る 場合があります。このCookie は Google にフィードバックされ続けます。

私が今していることは、ログイン呼び出しを実行する前に checkLogin を実行することです。true が返された場合は、明示的に を呼び出しますlogOut()

logOut 呼び出しは、Google が拒否したがブラウザに残した Cookie を削除します。ループし続けるように見える理由は、Cookie が存在するためですが、再認証しても、既に Cookie があるため、新しい Cookie は生成されません。残念ながら、そこにあるものは無効です。

于 2011-01-12T05:51:54.947 に答える
0

login メソッドにもスコープを渡す必要があります。

于 2010-12-29T03:06:03.010 に答える