2015-01-14 10 views
5

私は、ui-routerを使ってAngularJSでフロントエンドを開発しました。バックエンドからREST APIを使用するには、OAuth2アクセストークン(暗黙の許可)を取得する必要があります。私は明らかに、リダイレクトURIであることAngularJS ui-routerとOAuth2のaccess_tokenが衝突する

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

mydomain.com/home URLにトークンバック認証サーバからのアクセスを得るとき

私の問題は、OAuthのダンスの最後のステップです。

リダイレクト後の第二のほんの一部、AngularJSは

mydomain.com/#/my-default-view 

のようなものにURLを変更し、その結果、アクセストークンは、URLから消去されます。

今いくつかのこと:

  • 私は私のOAuth2クライアント用のハッシュ(「#」)を含むリダイレクトURIを定義することは許されないのです。したがって、mydomain.com/#/auth-complete/のようなものはでなく、となります。
  • 私は$routeProvider.otherwise('/')を使用します。
  • $locationProvider.html5Mode(true);を設定して、中央の「#」を削除しようとしましたが、問題は同じです(リダイレクト後にURLとアクセストークンが即座に消去されます)。
  • URLがAngularで変更された後でも、HTTP応答でアクセストークンにアクセスできるため、おそらく$httpインターセプタを使用できますが、この共通タスクにはあまりにも多くの音がしますか?

アドバイスはありますか?この1つはクライアント側アプリケーションのためのOAuth2プロバイダとしてGoogleで私の作品

+0

おそらく、認証URLに一致する状態がない可能性があります。あなたは$ routeProvider.other( '/')を持っているので、不一致のURLパターンはWebサイトのルートに転送されます。 – erandac

+0

しかし、任意のトークンを含むURLはどのように一致しますか? "URLに 'access_token'が含まれていて、何もしない"と言うのは正規表現のようなものを使うことができますか? – Buddyshot

+0

はい、正規表現マッチングを使用できます。ここの文書をチェックしてくださいhttps://github.com/angular-ui/ui-router/wiki/URL-Routing – erandac

答えて

0

私はもうui-routerを使用していないが、それでも、回避策を必要とする人のためには、あなただけのトークンをキャッチする必要があります正規表現で。 the documentationからは、

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

ような何かを行うことができますし、authTokenであなたのアクセストークンを取得します。

+1

あなたはあなたの答えを詳述できますか? – JCC

+0

トークンにアクセスすることを意味しますか?右? – 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 
    } 
})