我有一個由我自己構建的AngularJs用戶身份驗證及其工作。一切工作正常。我可以登錄,可以檢查用戶是否可以訪問特定頁面等。除了事實上,令牌身份驗證我只在與WebApp進行的第二次交互時運行。例如,如果我更改localStorage上的某些數據(我要保存用戶數據)並嘗試訪問管理頁面,例如,我將能夠訪問該頁面,但在下一頁互動,然後我會被踢出頁面並回到登錄過程。AngularJs用戶身份驗證只發生在第二次交互
可能發生了什麼? 這是我使用的代碼:
app.js
function getUser() {
userinfo = JSON.parse(localStorageService.get("user")); //convert string to json
$scope.userData = userinfo; //Display purpouso only;
};
function checkToken() {
var userCheckToken = JSON.parse(localStorageService.get("user"));
$http.post('dist/php/db.php?action=token', userCheckToken)
.success(function(res){
userToken = res;
}).error(function(err){
alert(feedbackError);
});
};
$rootScope.$on('$stateChangeStart', function(e, to) {
if (to.data && to.data.requireLogin) {
getUser();
checkToken();
if (!userinfo) {
e.preventDefault();
$state.go('login');
alert("You need to be loggedin");
}
else if (userinfo && !userToken) {
e.preventDefault();
userInfo = false;
$state.go('login');
localStorageService.clearAll();
alert('Authentication failed');
}
}
});
同樣的事情發生在一個單獨的function
。假設我在頁面上有一個重要的功能,所以只有管理員可以執行該功能。我也正在檢查該進程的身份驗證,但它發生在同一事件上,僅在第二次交互時發生。
功能:
$scope.debugTk = function() {
checkToken();
if (!userToken) {
alert('Authentication failed');
} else {
$http.get('dist/php/db.php?action=debugTk')
.success(function(res){
$scope.resultDebug = res;
}).error(function(err){
alert(feedbackError);
});
}
}
'checkToken()'是異步的。在這種情況下,除了回調 – charlietfl
@charlietfl之外,您不能在它後面查找'userToken',我應該怎麼做? – celsomtrindade
這會通過在路由器父狀態中使用解析來簡化很多。然後,如果解決方案被拒絕,則該父項下的子狀態不可訪問 – charlietfl