2016-05-03 6 views
1

私は、アプリケーションにログインするためにOauth暗黙の許可フローを使用しています。ユーザーが認証されていないサイトにアクセスすると、それらは次のような構造でURLに送信されます。Safariはurl変数を解釈しませんか?

baseurl + '/oauth/authorize?response_type=token&client_id=xxxx&redirect_uri=' + redirecturl 

baseurlは、ユーザー名とパスワードを入力するための入力を含むページの場所です。正しい資格情報を入力し、そのページの「ログイン」ボタンをクリックすると、redirecturlに転送されます。 redirecturlは、ユーザーが最初にアクセスしようとしたアプリケーション自体(角型アプリ)の場所です。

次のコードは、ユーザーがログインした後に発生する特定のケースを処理します。

$urlRouterProvider 
      .when('/token_type=bearer&access_token=:accessToken', function ($location, $state, User, storageService) { 
        storageService.clearAll(); 
        User.authenticate($location.path().substr(1)); 
        $state.go('marketplace.applications'); 
       } 
     ); 

私はChromeを使用する場合は、予想通り、すべての作品。 Safariを使用すると、上記のコードは決して実行されません。

$urlRouterProvider.when()に渡される文字列に含まれる:accessTokenに注目してください。

調査したところ、$urlRouterProvider.when()に渡された文字列の:accessToken部分を削除すると、Chromeで同じ動作を再現できることがわかりました。これはSafariが:accessToken変数をどのように解釈するのか分からないと私につながります。 Safariが私が使用しているコードと互換性のないURLをどのように解釈するのか、それとも完全に何か他のものがありますか?

ありがとうございます。

答えて

0

:accessTokenは赤ちゃんだったことが判明しました。

:accessTokenを削除する理由は、URLがブラウザにあったURLと一致しないため、コードが実行されていないためです。しかし、Safariでは、redirecturlが設定されていることと関連して、の異なるのURLの不一致により、コードが実行されませんでした。

元はredirecturlbaseurl + '/test'に設定しました。これにより、サーバーから返されたURLがbaseurl + 'test/#token_type'に戻されました。

このURLに移動すると、Chromeは自動的に/を追加し、URLをbaseurl + 'test/#/token_type'に変更しました。これは私の$urlRouterProvider.when()機能に一致しました。

Safariには/が追加されていないので、$urlRouterProvider.when()と一致するコードは見つかりませんでした。コードは実行されませんでした。

私はbaseurl + '/test/'代わりのbaseurl + '/test'

に私の最初の redirecturlを設定することにより、この問題を解決することができました
関連する問題