मान लें कि मेरे पास 4 मार्ग हैं - 2 को उपयोगकर्ता को लॉग इन करने की आवश्यकता है, 2 नहीं। मेरा ऐप init लगता है:मार्गप्रदाता के साथ कोणीय में एक मार्ग लॉन्च करने से पहले मैं लॉगिन या अन्य स्थिति की जांच कैसे करूं?
$routeProvider.when('/open1',{templateUrl:'/open1.html',controller:'Open1'});
$routeProvider.when('/open2',{templateUrl:'/open2.html',controller:'Open2'});
$routeProvider.when('/secure1',{templateUrl:'/secure1.html',controller:'Secure1'});
$routeProvider.when('/secure2',{templateUrl:'/secure2.html',controller:'Secure2'});
मार्गों /open1
और /open2
सभी के लिए खुले हैं, जबकि मार्गों /secure1
और /secure2
उपयोगकर्ता की आवश्यकता में लॉग इन करने और, अगर नहीं, कुछ कार्रवाई करते हैं, जैसे कि लॉगिन करने या चेतावनी लॉन्च करने के लिए रीडायरेक्ट करें। मैं अपने Auth
सेवा और कॉलिंग का उपयोग करके उपयोगकर्ता का राज्य निर्धारित कर सकता हूं, उदाहरण के लिए, Auth.isLogin()
। तो परिणाम होगा:
/open1
और/open2
के लिए जा रहा हमेशा टेम्पलेट और नियंत्रक ऊपर- घोषित करने के लिए जाना है, तो
Auth.isLogin()
रिटर्न सच है,/secure1
और/secure2
ऊपर घोषित टेम्पलेट और नियंत्रक - यदि करने के लिए जाना
Auth.isLogin()
झूठा रिटर्न,/secure1
और/secure2
कुछ अन्य कार्यवाही करें, उदाहरण के लिए$location.path('/login')
मैं सकता Secure1
और Secure2
नियंत्रकों कि जाँच करता है में डाल तर्क है, लेकिन यह दोहराव है और जिम्मेदारियों अप मिक्स, उन्हें कठिन परीक्षण करने के लिए बनाता है, आदि
वहाँ एक रास्ता है कि मैं कर सकता है घोषित करने के लिए $routeProvider
का उपयोग करें, "इस मार्ग और इस मार्ग की जांच करें और यदि नहीं, तो पुनर्निर्देशित करें"? मैं किसी भी तरह resolve
का उपयोग करने के बारे में सोच रहा था, लेकिन यह सुनिश्चित नहीं है कि इसे कैसे काम किया जाए (resolve
पर दस्तावेज़ बहुत स्पष्ट नहीं हैं, और कुछ उपयोगी उदाहरण हैं)।
संपादित करें:
नीचे उत्तरों के आधार पर, ऐसा लगता है ऐसा करने के लिए तीन दर्शन देखते हैं:
- में लॉग इन जाँच करें और वादा विफल
resolve
का उपयोग करना, और उसके बाद के लिए$routeChangeError
घटना को पकड़ने अनुप्रेषित http://www.sitepoint.com/implementing-authentication-angular-applications/ - में लॉग इन जाँच करें और पुन: निर्देशित http://arthur.gonigberg.com/2013/06/29/angularjs-role-based-auth/
- बस का उपयोग करने के लिए सिर्फ
$routeChangeStart
घटना का उपयोग लॉग इन जाँच करने के लिए हल मैं n और http://midgetontoes.com/blog/2014/08/31/angularjs-check-user-login
दूसरा विकल्प दो उत्तरदाताओं ने सुझाव दिया है।
क्या आप कृपया बता सकते हैं कि var onlyLoggedIn कहां रखा जाए, जैसे कि किस दायरे में? मैं इसके लिए बहुत नया हूँ। @deitch –
@AayushKumarSingha मैं इसे अपने app.js में स्थानीय चर के रूप में घोषित करता हूं और फिर इसे अपने '$ रूटप्रदाता 'में संदर्भित करता हूं। लेकिन यह कहीं भी आप चाहते हैं, क्योंकि आप हमेशा '() 'की आवश्यकता हो सकती है या अन्यथा इसे शामिल कर सकते हैं। – deitch
आपका यूआरएल मर चुका है – Denny