2013-02-07 23 views
6

के साथ सर्वर से रीडायरेक्ट करते समय मैं एंड्रॉइड (2.3.x) के पुराने संस्करण के लिए एक वेब/फोनगैप एप्लिकेशन बना रहा हूं। जब तक मैं मिश्रण में किसी भी सर्वर रीडायरेक्शन को जोड़ने की कोशिश नहीं करता तब तक सबकुछ बढ़िया काम करता है। यहां परिदृश्य है:एंड्रॉइड पर अनंत रीडायरेक्ट लूप AngularJS

सर्वर (node.js) के पास '/' पर एक मार्ग है। जब यह मार्ग मारा जाता है, तो यह देखने के लिए जांच करता है कि कोई सत्र है या नहीं। यदि कोई सत्र नहीं है, तो यह रीडायरेक्ट/लॉगिन करता है। ठीक है, यह हिस्सा काम करता है (सर्वर के अनुसार, वैसे भी)।

समस्या उत्पन्न होती है जब क्लाइंट रीडायरेक्ट हो जाता है। चूंकि एंड्रॉइड 2.3 इतिहास.pushState का समर्थन नहीं करता है, यह हैशबैंग पर वापस आ जाता है। इसका अर्थ यह है कि AngularJS यूआरएल को/#!/लॉगिन करने के लिए फिर से लिखता है, जो सर्वर अनुरोध को '/' का कारण बनता है, जो सर्वर को सत्र की जांच करने और '/ login' पर रीडायरेक्ट करने का कारण बनता है, जिससे AngularJS को url को \ n!/लॉगिन .. और इतने पर और आगे .. अनिश्चित काल तक।

कोई विचार है कि मैं AngularJS के साथ सर्वर से कैसे रीडायरेक्ट कर सकता हूं? क्या मुझे अपने तर्क में इस तर्क को संभालना नहीं चाहिए बल्कि इसके बजाय इसे ग्राहक पर लागू करने का प्रयास करें? इसे संभालने का एक तरीका होना चाहिए, मुझे यकीन है, लेकिन मैं इसे समझने के लिए प्रतीत नहीं कर सकता।

किसी भी मदद की सराहना की जाएगी। धन्यवाद!!

+0

मैं सुनिश्चित नहीं हूं मैं पूरी तरह से आपके विवरण का पालन करता हूं: यदि सर्वर रीडायरेक्ट जारी कर रहा है, तो उसे ब्राउज़र द्वारा प्राप्त किया जाना चाहिए, न कि AngularJS। लेकिन शायद आप सर्वर से एक्सआरआर के माध्यम से उस यूआरएल को प्राप्त कर रहे हैं, और $ स्थान को असाइन कर रहे हैं, जो काम नहीं करेगा: कोणीय दस्तावेज़ों से: "$ स्थान सेवा आपको केवल यूआरएल बदलने की अनुमति देती है; यह आपको अनुमति नहीं देती है पृष्ठ को फिर से लोड करें। जब आपको यूआरएल बदलने और पेज को फिर से लोड करने या किसी दूसरे पेज पर नेविगेट करने की आवश्यकता होती है, तो कृपया निम्न स्तर एपीआई, $ window.location.href का उपयोग करें। " वैकल्पिक रूप से, शायद आपको '/ login #!/Login' पर रीडायरेक्ट करने की आवश्यकता है? – Piran

+0

मेरी इच्छा है कि मैं दिखा सकता हूं कि क्या हो रहा है, लेकिन कोणीय मेरे सर्वर रीडायरेक्ट को "अपहरण कर रहा है"। सर्वर रीडायरेक्ट/लॉग इन और कोणीय को इसे/#!/लॉगिन के रूप में पुनः लिखता है, जो सर्वर को यह कहने का कारण बनता है "आप लॉग इन नहीं हैं, इसलिए लॉगिन करने के लिए रीडायरेक्ट करें"। सर्वर को रूट के रूप में/(जो चाहिए, क्योंकि यह है कि एंगुलर इसे फिर से लिखता है)। –

उत्तर

0

यह बेहतर होगा अगर आपने प्रमाणीकरण पूरी तरह क्लाइंट-साइड किया हो। कोणीय अंत में शुरुआत में एक AJAX कॉल करें, यह पूछने पर कि क्या हम लॉग इन हैं। यदि नहीं, तो उपयोगकर्ता को जानकारी के लिए संकेत दें (शायद एक मोडल संवाद में) और फिर सर्वर पर 'लॉगिन' करने के लिए पोस्ट करें।

सुरक्षा के लिए, क्लाइंट पक्ष पर प्रमाणीकरण-संवेदनशील जानकारी में से कोई भी संग्रहित नहीं किया जाना चाहिए। इसके बजाए, इसे AJAX के साथ पुनर्प्राप्त किया गया है - और 401 के साथ AJAX को जवाब दें या कुछ त्रुटि अगर उपयोगकर्ता सही तरीके से लॉग इन नहीं है।

+0

यह हमारे आवेदन की प्रकृति को देने के लिए एक कठिन कार्यान्वयन होगा - मैंने पहले ही इसका प्रयास किया है। मुझे सर्वर आर्किटेक्चर की सीमाओं में काम करना है जो पहले से ही सेटअप है, दुख की बात है। हालांकि धन्यवाद! –

1

कमांडिंग रीडायरेक्ट के लिए एक सरल वस्तु का उपयोग करें:
उपयोगकर्ता के लॉग इन नहीं है, तो वापसी {action: "redirect" url:"/login"}

तब क्लाइंट में, प्रतिक्रिया प्राप्त करने के बाद, action == 'redirect' के लिए जाँच करें और $location.path(url)