我有一個應用程序,我使用cookie來存儲訪問令牌,並通過使用API getUser(accessToken)
獲取用戶詳細信息。考慮一種情況,用戶已經登錄,我在Cookie中有訪問令牌,但沒有用戶詳細信息。當用戶試圖訪問一個頁面時,可以說/ abc,我應該如何解決這個問題。
這是我在做什麼, 我在運行模塊中有getUser(accessToken)API。我在跑步區也有類似$rootScope.$on('$stateChangeStart', fuction(){});
的活動。 當用戶嘗試訪問/ abc時,在解析中檢查用戶角色以確認用戶是否有權訪問此頁面。在得到getUser()API的響應之前,我會檢查用戶角色。 我應該如何解決這個問題?問題在獲取用戶詳細信息和檢查中的角色
0
A
回答
0
我認爲使用用戶角色是最好的選擇。 您可以實現用戶角色,像這樣爲常量:
.constant('USER_ROLES', {
all: '*',
admin: 'admin',
editor: 'editor',
guest: 'guest'
})
約常量一個很好的事情是,他們可以注射般的服務,這使得它們很容易在你的單元測試嘲笑。它還允許您稍後重命名它們(更改值),而無需更改一堆文件。
相關授權(訪問控制)邏輯在服務最好分組:
.factory('AuthService', function ($http, Session) {
var authService = {};
authService.login = function (credentials) {
return $http
.post('/login', credentials)
.then(function (res) {
Session.create(res.data.id, res.data.user.id,
res.data.user.role);
return res.data.user;
});
};
authService.isAuthenticated = function() {
return !!Session.userId;
};
authService.isAuthorized = function (authorizedRoles) {
if (!angular.isArray(authorizedRoles)) {
authorizedRoles = [authorizedRoles];
}
return (authService.isAuthenticated() &&
authorizedRoles.indexOf(Session.userRole) !== -1);
};
return authService;
})
大多數時候,你會希望禁止訪問整個頁面,而不是隱藏單個元素的時間。在路由(或狀態,使用UI路由器)上使用自定義數據對象時,我們可以指定哪些角色應該被允許訪問。此示例使用UI路由器樣式,但對於ngRoute也適用。接下來,我們需要在每次路線改變(即用戶導航到另一頁面)時檢查該屬性。這包括聽$ routeChangeStart(用於ngRoute)或$ stateChangeStart(對於UI路由器)事件:
.run(function ($rootScope, AUTH_EVENTS, AuthService) {
$rootScope.$on('$stateChangeStart', function (event, next) {
var authorizedRoles = next.data.authorizedRoles;
if (!AuthService.isAuthorized(authorizedRoles)) {
event.preventDefault();
if (AuthService.isAuthenticated()) {
// user is not allowed
$rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
} else {
// user is not logged in
$rootScope.$broadcast(AUTH_EVENTS.notAuthenticated);
}
}
});
})
當用戶無權訪問該頁面(因爲他沒有登錄或沒有正確的角色),將阻止轉換到下一頁,因此用戶將停留在當前頁面上。
相關問題
- 1. SPNEGO獲取用戶詳細信息
- 2. 從log.nsf獲取用戶詳細信息
- 3. 從MGTwitterEngine獲取用戶詳細信息
- 4. ActiveDirectoryLdapAuthenticationProvider:獲取用戶詳細信息
- 5. Get-ADGroupMember獲取用戶詳細信息?
- 6. 我如何從MS CRM 2011中的WhoAmIRequest獲取用戶角色詳細信息
- 7. 獲取Facebook詳細信息
- 8. 從Azure工作者角色獲取異常詳細信息
- 9. 在ASP.NET MVC中檢查用戶的詳細信息ActionFilter
- 10. Ldap如何獲取用戶詳細信息。像電子郵件和用戶名其他詳細信息
- 11. 如何獲取Facebook在tvOS中的用戶詳細信息
- 12. 如何在twitter中獲取當前用戶的詳細信息
- 13. 如何在php中獲取用戶的詳細信息
- 14. 在用戶登錄Facebook後獲取用戶詳細信息
- 15. 在Josso中,如何使用「josso_assertion_id」獲取用戶詳細信息
- 16. 使用PFFVideosUtilsV4在Swift中獲取Facebook用戶詳細信息Cocoapods
- 17. 用戶詳細信息表中的用戶認證詳細信息或單獨?
- 18. 獲取Facebook用戶的電話號碼和詳細信息
- 19. TFS查詢以獲取檢查詳細信息
- 20. 獲取用戶詳細的他的角色在laravel 5.4
- 21. 在SocialEngine中獲取用戶詳細信息
- 22. 如何在ASP.NET中獲取用戶環境詳細信息
- 23. 在JSP中獲取用戶詳細信息?
- 24. 在firebase中獲取個人用戶詳細信息
- 25. 在Yii框架中獲取用戶詳細信息
- 26. 使用cURL獲取用戶facebook用戶詳細信息
- 27. 從照片中獲取詳細信息
- 28. 獲取已登錄的用戶詳細信息在sharepoint c#webpart
- 29. 在登錄時檢查用戶詳細信息Android
- 30. 從用戶名(Sqlite,PHP)獲取用戶詳細信息
而你的代碼是... –
如果你在cookie中有有效的accessToken,爲什麼不把你的用戶信息保存在localStorage中? –
目前我正在那樣做。但我想知道如何在不保存本地存儲的情況下完成此操作。 – simon