2015-01-14 10 views
5

के साथ संघर्ष करता है मेरे पास एंगुलरजेएस में यूई-राउटर के साथ एक फ्रंट एंड विकसित हुआ है। बैकएंड से आरईएसटी एपीआई का उपभोग करने के लिए मुझे ओएथ 2 एक्सेस टोकन (निहित अनुदान) प्राप्त करने की आवश्यकता है।एंगुलरजेएस यूई-राउटर OAuth2 access_token

मेरे समस्या जाहिर है, OAuth नृत्य के अंतिम चरण में है, जब मैं यूआरएल

mydomain.com/home/#access_token=hdzjkdnba89fenbjkéz38U0D903ç&... 

mydomain.com/home रीडायरेक्ट यूआरआई होने में टोकन प्रमाणीकरण सर्वर से वापस पहुँच जाते हैं।

पुनर्निर्देशन के बाद दूसरे की बस एक अंश, AngularJS

mydomain.com/#/my-default-view 

और फलस्वरूप पहुँच टोकन URL से मिटा दिया जाता है की तरह कुछ में URL बदल जाता है।

अब कुछ बातें:

  • मैं अपने OAuth2 ग्राहक के लिए एक हैश ('#') से युक्त एक रीडायरेक्ट यूआरआई को परिभाषित करने की अनुमति नहीं कर रहा हूँ। इसलिए mydomain.com/#/auth-complete/ जैसे ठीक नहीं है।
  • मैं $routeProvider.otherwise('/') का उपयोग करता हूं।
  • मैंने बीच में '#' को हटाने के लिए $locationProvider.html5Mode(true); सेट करने का प्रयास किया लेकिन समस्या एक ही है (यूआरएल और एक्सेस टोकन तुरंत पुनर्निर्देशन के बाद मिटा दिया जाता है)।
  • चूंकि एन्कुलर द्वारा URL को संशोधित करने के बाद भी पहुंच टोकन HTTP प्रतिक्रिया में अभी भी पहुंच योग्य है, तो शायद मैं $http इंटरसेप्टर का उपयोग कर सकता हूं लेकिन यह सामान्य कार्य के लिए थोड़ा अधिक लगता है?

कोई सलाह?

+0

शायद आपके पास लेखक URL के लिए कोई मिलान स्थिति नहीं हो सकती है। चूंकि आपके पास $ रूटप्रोवाइडर है। अन्यथा ('/'), बेजोड़ यूआरएल पैटर्न वेब साइट की रूट पर अग्रेषित किए जाएंगे। – erandac

+0

लेकिन मैं एक मनमाना टोकन युक्त यूआरएल से कैसे मेल करूं? रेगेक्स जैसे कुछ का उपयोग करना संभव है "अगर यूआरएल में 'access_token' है, तो बस कुछ भी नहीं करें"? – Buddyshot

+0

हां आप रेगेक्स मिलान कर सकते हैं। यहां प्रलेखन की जांच करें https://github.com/angular-ui/ui-router/wiki/URL- राउटिंग – erandac

उत्तर

0

मैं अब और ui-router का उपयोग नहीं करते लेकिन जो लोग अभी भी एक समाधान की जरूरत के लिए, तो आप सिर्फ टोकन को पकड़ने के लिए है एक regex में। the documentation से, आप

.state('oauth.token', { 
     url: "/o/#{authToken:[0-9a-zA-Z]+}", 
     ... 
}) 

की तरह कुछ करते हैं और authToken में अपनी पहुंच टोकन प्राप्त कर सकते हैं।

+1

क्या आप अपने उत्तर पर विस्तार कर सकते हैं? – JCC

+0

आपका मतलब टोकन तक पहुंच है? सही? – Satyadev

5

यह एक क्लाइंट-साइड अनुप्रयोगों के लिए OAuth2 प्रदाता के रूप में गूगल के साथ मेरे लिए काम करता है:

$urlRouterProvider.otherwise('/'); 

$stateProvider.state('access_token', { 
    url: '/access_token={accessToken}&token_type={tokenType}&expires_in={expiresIn}', 
    template: '', 
    controller: function($stateParams) { 
     var token = $stateParams.accessToken; 
     // do something usefull with token 
    } 
})