我正在使用adaljs。一切似乎都很棒......我可以登录,退出,精彩。
现在,一小时后...我再次加载我的应用程序!不是很好。我调试了,我看到adalAuthenticationService.userInfo.isAuthenticated == false
和adalAuthenticationService.profile == undefined
。
得到这个后我该怎么办?我该如何恢复?
我何时使用这些功能以及用于什么?
acquireToken
clearCache
clearCacheForResource
getCachedToken
getResourceForEndpoint
getUser
logOut
logIn
logOutInProgress
最重要的是,adaljs repository上为什么不详细解释(或简单!)?
让我们把它变成一个关于adaljs函数和属性的wiki。我们都想知道他们做了什么,他们做了什么,以及如何使用它们。
修改
在我的app.js中,我有用于处理身份验证的代码:
if (adalAuthenticationService.userInfo.isAuthenticated && adalAuthenticationService.userInfo.profile) {
var great = "everything is awesome";
_ld.extend($scope.user,adalAuthenticationService.userInfo);
$scope.successFullyLoggedIn($scope.user);
} else if(!adalAuthenticationService.userInfo.isAuthenticated && !adalAuthenticationService.userInfo.profile) {
adalAuthenticationService.clearCache();
adalAuthenticationService.login();
} else {
adalAuthenticationService.clearCache();
adalAuthenticationService.logOut();
}
答案 0 :(得分:2)
adal.js从AAD获取的令牌每隔一小时后就会过期。如果你使用角度包装器,只要有一个有效的用户登录,adal就能自动更新令牌。如果你没有使用角度包装器,那么应用程序必须负责更新令牌,这就是api会派上用场。
我会尝试解释他们每个人的所作所为:
acquireToken
:这是主要方法之一。采用2个参数:resourceId和callback。 ResourceId是azure门户网站上应用程序的应用程序ID。 Adal首先查看缓存以检查是否存在令牌。如果没有,它会向AAD发送请求以获取新令牌。它将令牌或错误传递给回调,回调具有如下签名:callback(err,token)。
clearCache
:删除adal存储的浏览器存储中的所有项目。有点新的开始。
clearCacheForResource
:我假设你使用的是实验版,因为这个api不是1.0.12版本的一部分。这基本上删除了特定资源ID的缓存条目。
getCachedToken
:查看caceh并返回令牌或null给定资源。
getResourceForEndpoint
:这在使用角度包装时很有用。这将查看用户在初始化adal时提供的端点映射。此方法的目的是将url解析为resourceId,然后将其提供给acquireToken方法。
getUser
:当前登录的用户对象或null。
logOut
:注销用户,清除缓存并将用户重定向到postlogoutredirecturi(如果指定),否则将用户重定向到redirecturi。
login
:登录用户,创建用户对象(可以使用getUser访问),将id令牌保存在缓存中。它还在初始化adal时调用配置对象上应用程序级别的回调。
logOutInProgress
:你的意思是loginInProgress?这只是一个内部使用的标志,用于查看是否存在正在进行的活动登录。
不幸的是,我们没有api指南,可以帮助人们更好地理解我们的api。我会把这个带到团队的通知中。感谢。
回到你的问题:你可以使用getUser()来获取用户对象。如果为null,则调用logIn()方法登录用户。如果user.userName不为null但user.isAuthenticated为false,则表示令牌已过期,调用acquireToken方法并传递应用程序的clientId以续订令牌。此外,您要检查adalAuthenticationService.usernInfo.profile而不是adalAuthenticationService.profile。