2015-01-14 14 views
5

UI yönlendiricili AngularJS'de geliştirilmiş bir ön uç var. REST API'sini arka uçtan tüketmek için bir OAuth2 erişim belirteci (örtük hibe) almam gerekiyor. Ben yönlendirme URI olmak urlOAuth2 access_token ile AngularJS ui yönlendirici çakışmaları

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

mydomain.com/home token geri kimlik doğrulama sunucusundan erişim elde zaman

Benim sorunum Açıkçası, OAuth dans son adımda yatmaktadır. Yeniden yönlendirme sonra saniyenin sadece bir kısmını

, angularjs

mydomain.com/#/my-default-view 

ve sonuç erişim belirteci URL'den silinir gibi bir şey URL'yi değiştirir. Şimdi

birkaç nokta:

  • benim OAuth2 istemci için bir karma ('#') içeren bir yönlendirme URI tanımlamak için izin verilmedi. Dolayısıyla, mydomain.com/#/auth-complete/ gibi bir şey değil olur.
  • $routeProvider.otherwise('/') kullanıyorum.
  • Ortadaki '#' öğesini kaldırmak için $locationProvider.html5Mode(true);'u ayarlamayı denedim ancak sorun aynı (URL ve erişim belirteci yeniden yönlendirme işleminden hemen sonra silinir).
  • URL, Angular tarafından değiştirildikten sonra bile HTTP yanıtında erişim belirtecine hala erişilebildiğinden, büyük olasılıkla bir $http ara kesicisi kullanabilirdim, ancak bu genel görev için biraz fazla geliyor değil mi?

Herhangi bir öneri? Bu seferki İstemci tarafı Uygulamaları için OAuth2 sağlayıcısı olarak Google ile benim için çalışıyor

+0

Muhtemelen, yetkili URL için eşleşme durumunuz olmayabilir. $ RouteProvider.otherwise ('/') değeriniz olduğundan, benzersiz URL modelleri web sitesinin kök dizinine yönlendirilir. – erandac

+0

Ancak, isteğe bağlı bir belirteç içeren bir URL'yi nasıl eşleştirebilirim? "Eğer url 'access_token' içeriyorsa, hiçbir şey yapmayın" demek için regex gibi bir şey kullanmak mümkün mü? – Buddyshot

+0

Evet, regex eşlemesine sahip olabilirsiniz. Buradaki belgelere bakın https://github.com/angular-ui/ui-router/wiki/URL-Sonraki – erandac

cevap

0

Artık ui-router kullanmıyorum ama yine de geçici çözüm ihtiyacı olanlar için, sadece belirteci yakalamak zorundayız bir regex içinde. the documentation itibaren,

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

gibi bir şey yapabilirsiniz ve authToken da erişim belirteci olsun.

+1

cevabınızı açıklayabilir misiniz? – JCC

+0

Erişim Token mı demek istediniz? sağ? – Satyadev

5

:

$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 
    } 
})