angularjs - Creating an AuthService to check if user is logged in -


मेरे पास एक AngularJS ऐप है जो एक Laraval PHP बैकएंड के साथ संचार करता है। / api / checklogin के लिए एक GET अनुरोध भेजा जा रहा है {लॉग इन किया गया है: गलत, उपयोगकर्ता नाम: अपरिभाषित, आईडी: अपरिभाषित} यदि उपयोगकर्ता लॉगिन नहीं है, अन्यथा, {लॉग इनः सच, यूज़रनेम: 'जॉन', आईडी: 123} जैसे कुछ वापस लौटें। मैं एंजरीआरएस सेवाओं का उपयोग करने से परिचित नहीं हूँ, लेकिन मैं सेट अप करना चाहता हूं AuthService नामक एक सेवा जो अच्छी तरह से, मेरे ऐप की प्रमाणीकरण सेवाओं को कर सकती है।

मैं निम्नलिखित फ़ंक्शंस को लागू करना चाहूंगा: AuthService.loggedIn , < कोड> AuthService.isAdmin , AuthService.username , और AuthService.id

मैं इन कार्यों को ऐसे तरीके से कार्यान्वित करना चाहता हूं बुला एक सभी सभी के लिए मूल्य निर्धारित करेगा उदाहरण के लिए, मान लें कि मैं AuthService.isAdmin को कॉल करता हूं। यह फ़ंक्शन जांचता है कि यदि isAdmin सेट है, तो ऐसा है, यह isAdmin का मान वापस करेगा यदि isAdmin सेट नहीं है, तो यह / api / checklogin को एक HTTP अनुरोध कर देगा, loggedIn के लिए मान सेट करें, isAdmin < / Code>, उपयोगकर्ता नाम , और id दर्ज करें, और फिर isAdmin का मान वापस करें।

  कोणीय। मॉड्यूल ('myApp')। कारखाना ('AuthService', [' $ Http ', फ़ंक्शन ($ http) {var लॉग इन; var isAdmin; var उपयोगकर्ता नाम; var आईडी; var चेक लैगिन = फ़ंक्शन () (यदि (लॉग इन! = अपरिभाषित) {लौट आई लॉग इन} else {setUserData (checkLogin);}} var {Ad: username = function () {if (username! = Undefined) {return username} else {setUserData (checklogin)} {returnAdmin! = Undefined) {return isAdmin} else {setUserData (checklogin)}} var returnUsername = function () {if (username! ;}} Var returnId = function () {if (id! = Undefined) {return id} else {setUserData (checklogin);}} // हमारा फ़ंक्शन कॉल जो हमारे लॉग इन, isAdmin, username, और id values ​​var setUserData सेट करेगा = फ़ंक्शन (कॉलबैक) {$ http.get (baseURL + '/ api / checklogin')। सफलता (फ़ंक्शन (डेटा) {लॉग इन = डेटा.लॉगड; यदि (लॉग इन) {isAdmin = data.is_admin; username = data.username; आईडी = डेटा.id;} कॉलबैक ();})}} लौटा {लॉग इन: फ़ंक्शन () { वापसी चेक लॉग इन (); }, IsAdmin: function () {return checkAdmin (); }, उपयोगकर्ता नाम: फ़ंक्शन () {वापसी वापसी उपयोगकर्ता नाम (); }, आईडी: फ़ंक्शन () {वापसी वापसी आईआईडी (); },}}]));    

ऐसा लगता है कि आप कॉलबैक के रूप में checklogin का उपयोग करना चाहते हैं , लेकिन इसे अपने तरीके से करने के बजाय, checklogin से setUserData पर वादा वापस लौटाएं। फिर चेक लॉगिन में, परिणामों को संभाल करने के लिए अपना स्वयं का स्थगित करें।

आप $ http कॉल को शुरू करके अतुल्यकालिक तर्क पर कार्य कर रहे हैं, इसलिए चेक लॉजििन को सभी मामलों में एक वादा वापस करने की आवश्यकता है:

  var checklogin = function () {// एक कस्टम स्थगित var defer = $ q.defer () बनाएँ) ; अगर (लॉग इन! = अपरिभाषित) {// अपना स्थगित defer.resolve (loggedIn) में दर्ज किए गए मूल्य के साथ स्थगित करें; } Else {setUserData ()। फिर (फ़ंक्शन (डेटा) {console.log ('उपयोगकर्ता डेटा को सफलतापूर्वक लौटा दिया गया'); लॉग इन = डेटा। लॉग किया गया; यदि (लॉग इन) {isAdmin = data.is_admin; username = data.username; Id = data.id; defer.resolve (loggedIn);} else {defer.reject ();}}, फ़ंक्शन () {console.log ('setUserData विफल'); defer.reject ();}); } वापसी defer.promise; } Var setUserData = function () {return $ http.get (baseURL + '/ api / checklogin'); }   

AuthService.loggedIn () अब एक वादा वापस करेगा आपको इसे से मूल्य प्राप्त करने के वादे को हल करना होगा:

  AuthService.loggedIn ()। फिर (फ़ंक्शन (डेटा) {console.log (डेटा);});   

ऊपर दिए गए फ़ंक्शन को तब तब बुलाया जाएगा जब वादा का मूल्य उस मूल्य के साथ हल हो जाता है जिसे वादा के साथ हल किया गया था। इस स्थिति में, इसका डेटा.logged का मान है क्योंकि defer.resolve को आपके checklogin फ़ंक्शन में पारित किया गया था।

यहां कुछ वादे हैं:

$ q

Comments

Popular posts from this blog

java - ImportError: No module named py4j.java_gateway -

python - Receiving "KeyError" after decoding json result from url -

.net - Creating a new Queue Manager and Queue in Websphere MQ (using C#) -