我正在使用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);
然而,当我运行此页面时,页面会将我重定向到身份验证页面。在我进行身份验证后,将其发送回我的页面,然后再次将我发回到身份验证页面。我已经包含警报来检查是否正在设置令牌并且它似乎不起作用。有人有这个问题吗?
答案 0 :(得分: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方法。
答案 1 :(得分:1)
答案 2 :(得分:0)
您也应该将范围传递给login方法。
答案 3 :(得分:0)
有时候,您的浏览器最终会得到一个orphaned
Cookie - 这会继续反馈给Google。
我现在正在做的是在执行登录调用之前正在执行checkLogin,如果它返回true,我明确地调用logOut()
。
logOut调用将删除Google拒绝但留在浏览器中的所有Cookie。它似乎继续循环的原因是因为cookie存在,但即使在reauth上,它也不会产生新的,因为你已经有了。但遗憾的是,那个存在无效的那个。