2010-05-06 27 views
5

मैं जावास्क्रिप्ट Google डेटा एपीआई का उपयोग कर रहा हूं और AuthSub स्क्रिप्ट को सही तरीके से काम करने में समस्याएं आ रही हैं।Gdata जावास्क्रिप्ट 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); 

हालांकि प्रमाणीकरण पृष्ठ पर मुझे पुनर्निर्देश जब मैं इस पेज को चलाने: यह वर्तमान में मेरे स्क्रिप्ट है। प्रमाणीकरण के बाद यह मुझे मेरे पृष्ठ पर वापस भेजता है और फिर मुझे तुरंत प्रमाणीकृत पृष्ठ पर वापस भेजता है। मैंने यह जांचने के लिए अलर्ट शामिल किए हैं कि टोकन सेट किया जा रहा है और ऐसा लगता है कि यह काम नहीं कर रहा है। क्या किसी को यह समस्या है?

+2

समस्या यह है कि कुकी को थोड़ी देर लगती है जब Google आपकी साइट पर वापस रीडायरेक्ट करता है। हालांकि, कॉलबैक तुरंत चलाता है, और प्रमाणीकरण को सत्यापित करने के लिए उस समय तक कोई कुकी नहीं है, इसलिए यह फिर से Google पर रीडायरेक्ट करता है। 'सेटटाइमआउट' या किसी दूसरे के बाद प्रमाणीकरण जांच चलाने के लिए कुछ सुनिश्चित करने का प्रयास करें। – Anurag

+0

@Anurag - एक उत्तर के रूप में पोस्ट करें और आपको कुछ प्रतिनिधि मिल सकते हैं। मैं यह तुम्हारे लिए करूँगा, लेकिन वह चोरी हो जाएगा :) – Day

+0

टिप @ डे के लिए धन्यवाद .. अधिक प्रतिनिधि के लिए विचार हमेशा स्वागत है :) – Anurag

उत्तर

1

समस्या यह है कि कुकी को थोड़ी देर लगती है जब Google आपकी साइट पर वापस रीडायरेक्ट करता है। हालांकि, कॉलबैक तुरंत चलाता है, और प्रमाणीकरण को सत्यापित करने के लिए उस समय तक कोई कुकी नहीं है, इसलिए यह फिर से Google पर रीडायरेक्ट करता है। सेटटाइमआउट या किसी दूसरे के बाद प्रमाणीकरण जांच चलाने के लिए कुछ सुनिश्चित करने का प्रयास करें।

0

आपको लॉगिन विधि में भी दायरा पास करना चाहिए।

0

कभी-कभी आप अपने ब्राउज़र में orphaned कुकी के साथ समाप्त कर सकते हैं - जो Google को वापस खिलाया जाएगा।

अब मैं क्या कर रहा हूं, मैं अपना लॉगिन कॉल करने से पहले चेक लॉग कर रहा हूं, और यदि यह सच हो जाता है तो मैं स्पष्ट रूप से logOut() पर कॉल करता हूं।

लॉगऑट कॉल Google द्वारा अस्वीकार की गई किसी भी कुकीज को हटा देगा लेकिन आपके ब्राउज़र में छोड़ा जाएगा। ऐसा लगता है कि लूप में जाने का कारण यह है कि कुकी वहां है, लेकिन यहां तक ​​कि रीथ पर भी, यह एक नया उत्पादन नहीं करता है क्योंकि आपके पास पहले से ही एक है। लेकिन दुर्भाग्य से हमारे लिए, वह है जो अमान्य है।

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 विधि के लिए एक दायरा भी पास कर सकते हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^