我在AngularJS中相对较新,我被要求修改我们的应用程序,以便当用户关闭浏览器时,我们也将它们从Auth0服务中注销。
我有下面的代码,但我无法让它触发。请帮忙。
$rootScope.$on("$destroy", function() {
lockService.logout();
});
lockService.logout()
包含当用户单击logout
按钮时成功注销用户的功能,包括Auth0
signout
功能。
我在某处读到我可以使用主控制器的$on.$destroy
,但我不确定如何做到这一点。上面的代码实际上在 mainController
函数中,但它仍然不起作用。
这就是我找到答案的地方:https://stackoverflow.com/a/36444134/1168597
您可以将这样的指令添加到您的 body 元素中。
<body body-unload></body>
app.directive('bodyUnload', [
function () {
return {
restrict: 'A',
replace: false,
link: function (scope, element) {
function cleanupApp(){
// do cleanup here
}
element[0].onbeforeunload = function() {
cleanupApp();
};
}
};
}
]);
我找到了一种更干净、更有效的方法。
$rootScope.$on('$locationChangeStart', function () {
if (!($window.performance.navigation.type === 1) && lockService.isAuthenticated()) {
$rootScope.logout();
}
});
所以这里如果window.performance.navigation.type
是1
,这意味着该页面被refresh
-ed。然后我所做的是,如果它没有刷新并且我的lockService.isAuthenticated()
返回 true,我logout
用户。