2017-09-04 71 views
2

我正在使用ADAL.js(它調用Azure Active Directory)作爲驗證用戶的JavaScript庫。我使用下面的代碼是:在ADAL.js的登錄()後的回調未在Edge中調用

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <title></title> 
</head> 
<body> 
    <script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.15/js/adal.min.js"></script> 
    <script> 
     var endpoints = { 
      "https://management.core.windows.net": "https://management.core.windows.net" 
     }; 
     var config = { 
      clientId: 'e333d3fe-a73a-4476-8121-8a57f9a972ca', 
      endpoints: endpoints, 
     }; 
     var authContext = new AuthenticationContext(config); 
     authContext.handleWindowCallback(); 

     function onSuccessLogin(error, token, msg) { 

      console.log("Inside Call back"); 

      if (!!token) { 
       console.log("Log-in to Azure successfully done", token); 
      } 
      else { 
       console.log("Error while log-in to Azure", error); 
      } 

      if (!!authContext._user) { 
       console.log("You are connected to Azure ")   
      } 
     } 

     function login() { 
      authContext.popUp = true; 
      authContext.callback = onSuccessLogin; 
      authContext.login(); 
      // authContext.handleWindowCallback(); 
      var user = authContext.getCachedUser(); 
      console.log(user); 
     }; 

     function logout() { 
      authContext.logout(); 
     }; 

    </script> 
    <input id="Button1" type="button" value="clickme" onclick="clickme()" /> 
    <input id="Button3" type="button" value="login" onclick="login()" /> 
    <input id="Button2" type="button" value="logout" onclick="logout()" /> 

    // These are the text-boxes whose value I want to retain. 
    First name:<br> 
    <input id=fname" type="text" name="firstname" value="Mickey"> 
    <br> 
    Last name:<br> 
    <input id="lname" type="text" name="lastname" value="Mouse"> 
</body> 
</html> 

這些都是與此代碼在邊緣幾個問題,但一切都在Chrome中工作正常:

  1. 爲什麼onSuccessLogin()並不總是叫上邊緣?
  2. 爲什麼登錄彈出窗口並不總是出現?
  3. 進入憑證後的某個時間,流行音將不會關閉。

回答

1

什麼工作對我來說是:

  • 設置config.callbackpopUp=true之前調用AuthenticationContext(配置)

而且你不應該叫handleWindowCallback()如果網址不包含#。該代碼應該是: if (authenticationContext.isCallback(window.location.hash)) { authenticationContext.handleWindowCallback();

我建議你看看,適應我測試了以下樣品,並在邊工作(當然Chrome瀏覽器),在兩種情況下(有和沒有彈出): https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof-ca/blob/master/TodoListSPA/app.js (中配置是在https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof-ca/blob/master/TodoListSPA/appconfig.js

+0

我檢查了示例鏈接,完全按照您的建議完成。現在,登錄用戶在邊緣工作正常。但在邊緣的私密窗口中,回調從不會被調用。彈出窗口不會關閉,彈出窗口的URL變爲:https:// localhost:44315 /#id_token = eyJ0eXsV1cQiLPCJhxbGciOiJSUzI1NiIsI ....................... –

+1

是的,Edge存在已知問題(不是由於庫):當您在InPrivate中跨區域重定向時,本地和會話存儲會丟失。 Edge正在努力在未來的版本中修復他們的存儲。與此同時,您可以通過確保引用站點和重定向站點位於同一區域,通過消除跨區域的重定向來解決問題。 –

+0

它甚至不能在邊緣的非私人窗口中工作。 –

相關問題