2016-05-13 8 views
2

私はSPAアプリケーションでadalとadal-angular v.1.0.10ライブラリをセットアップしました。私はwebpackを使用していますが、グローバルなスコープの問題を避けるためにHTMLページでこれを参照してください(ただし、依存関係にしたいと思います)。ブラウザーがiframeを開いてリフレッシュトークンを取得しようとするまで、すべての機能が動作し、各iframeは別のiframeを内部で開きます。それはエラーを記録せず、私が間違っていることについての説明を見つけることができません。だから私は新鮮なシークレットブラウザでアプリケーションを実行するだけです。私はAzure ADと結婚しているので、なぜこれが起こっているのかについての説明さえありがとうと思います。 index.htmlをGitHubの上の議論の長いシリーズの後Adal&Adal-Angle-リフレッシュトークン無限ループ

<md-button aria-label="Login" ng-if="!userInfo.isAuthenticated" ng-click="login()"> 
    Login 
</md-button> 

<script src="build/app.bundle.js" charset="utf-8"></script> 
<script src="Scripts/adal.min.js" charset="utf-8"></script> 
<script src="Scripts/adal-angular.min.js" charset="utf-8"></script> 

私app.js

angular.module('myApp', ['AdalAngular', require('angular-route'), require('angular-animate'), require('angular-sanitize'), 'ngCookies', etc..]) 
    .config(['$routeProvider', '$locationProvider', '$mdThemingProvider', '$httpProvider', 'adalAuthenticationServiceProvider', 
    function ($routeProvider, $locationProvider, $mdThemingProvider, $httpProvider, adalProvider) { 

     // azure ad init 
     adalProvider.init({ 
      instance: 'https://login.microsoftonline.com/', 
      tenant: TENANT, 
      clientId: CLIENTID, 
      cacheLocation: 'localStorage', 
      anonymousEndpoints: [] 
     }, 
     $httpProvider 
    ); 

     $routeProvider 
     .when('/home', { 
     templateUrl: '/App/Layout/home.html' 
     }) 
     .when('/admin', { 
     templateUrl: '/App/Admin/admin.html', 
     requireADLogin: true 
     }) 
     etc... 

     $locationProvider.html5Mode(true).hashPrefix('!'); 

    }]); 
+0

これはadaljsの問題です。この[問題のgithubページ](https://github.com/AzureAD/azure-activedirectory-library-for-js/issues/216)とこれに関する[関連する質問](http://stackoverflow.com/)を参照してください。 question/34686460/adal-js-nonce-is-not-un-undefined /となります)。これに対して回避策または解決策を見つけたことがありますか?私はまったく同じ動作を経験しており、これらのリンクの情報は残念ながら実りありませんでした。 – Bryan

答えて

0

関連するセクション、これはとの問題があったことを私の注意に持って来られましたadal.jsのAuthenticationContext認証しようとしている間にiframeを開いたままにして、無限ループを引き起こします。私は、それがAuthenticationContextを公開することによって動作するようにしました。

var AuthenticationContext = require('expose?AuthenticationContext!./../Scripts/adal.js'); 
require('./../Scripts/adal-angular.js'); 

これはバージョン0.3.0バージョンのライブラリでのみ機能します。しかし、今は十分です。うまくいけば、彼らは現代のjsアプリケーションとの互換性を高めるために、将来ライブラリを変更することになります。

+0

1.0.11現在、これは無限ループを止めるための努力を払っていることを依然として問題にしています。それでもjsのグローバルスコープにアタッチする必要があります。私は、私が使用することを余儀なくされた古いバージョンが時代遅れになることはないと思っています。 –

0

'getRequestInfo'メソッドのadal.jsでは、iframeはAuthenticationContextの親を「調べます」。これは、AuthenticationContextがウィンドウスコープ上になければならないことを意味します。

//ES6 
import AuthenticationContext from "adal-angular/lib/adal"; 
window.AuthenticationContext = AuthenticationContext; 
... 

//ES5 
window.AuthenticationContext = require("adal-angular/lib/adal"); 
...