2017-08-30 68 views
1

我建立了我的Microsoft待办事项任务的小JS应用程序和使用msal.js库,以适应身份验证过程登录。 这工作得很好,我得到一个弹出窗口,我验证我的个人资料,弹出窗口关闭,我的任务出现在我的屏幕上。保持使用msal.js时

但是:似乎不记得我以前认证;每次运行我的webpack应用程序并且页面被引导时,它都会显示弹出窗口并要求进行身份验证。一旦我通过身份验证并刷新了我的页面,它就会向我显示任务,而不再显示弹出窗口。我没有尝试等待一个小时,但我认为这与不正确刷新我的访问令牌有关。我没有涉及Outlook/Microsoft API,我可以真正弄清楚我是否正确使用它。

简而言之:使下一次我开始我的应用我怎样才能一次验证任务的显示,而无需再次认证?

我的初始化函数

this.userAgentApplication = new Msal.UserAgentApplication(microsoftTasksClientId, null, function (errorDes, token, error, tokenType) { 
    // this callback is called after loginRedirect OR acquireTokenRedirect (not used for loginPopup/aquireTokenPopup) 
    console.log(token) 
    }) 
    let user = this.userAgentApplication.getUser() 
    if (!user) { 
    const self = this 
    // this.userAgentApplication = new Msal.UserAgentApplication(microsoftTasksClientId) 
    this.userAgentApplication.loginPopup([`${this.apiRootUrl}Tasks.readwrite`]).then(function (token) { 
     self.idToken = token 
     user = self.userAgentApplication.getUser() 
     if (user) { 
     self.getSilentToken() 
     } 
    }, function (error) { 
     console.log(error) 
    }) 
    } else { 
    this.getSilentToken() 
    } 

而我getSilentToken功能

const self = this 
    this.userAgentApplication.acquireTokenSilent([`${this.apiRootUrl}Tasks.readwrite`]).then(function (token) { 
    console.log('ATS promise resolved', token) 
    self.accessToken = token 
    self.getTasks() 
    }, function (err) { 
    console.log(err) 
    }) 

请不说我的代码是不是重构了! ;-)

您正在使用什么版本的MSAL

回答

1

? 在0.1.1版本中存在一个问题,默认情况下存储是'sessionStorage',不能真正改变。在这种情况下,您的登录信息仅保存在当前打开的窗口中,即使打开新的浏览器窗口,您也将被强制重新登录。 您应该使用'localStorage'来实现您想要的并将其作为UserAgentApplication的构造函数参数传递。

以下是此在他们的回购修复:

https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/eba99927ce6c6d24943db90dfebc62b948355f19