gpt4 book ai didi

angularjs - 在所有 Angular Controller 中存储用户信息

转载 作者:行者123 更新时间:2023-12-01 12:37:51 24 4
gpt4 key购买 nike

我创建了一个身份验证 Controller ,它使用 localstorage 存储经过身份验证的用户信息(我使用的是 Gias Kay Lee 的 ngStorage)。在不同 Controller 中访问此信息的最佳位置是什么(以 Angular 方式)。我尝试使用服务,代码:

myApp.factory("UserService", ["$localStorage", function ($localStorage) {
var model = {
IsAuthenticated: $localStorage.IsAuthenticated,
Username: $localStorage.UserName
};
return model;
}]);

但这(如文档所述)表现为单例。

我还查看了 $rootScope 的使用,但据我所知,这只能在 myApp.run 中初始化。我说得对吗?

当然,我可以在每个 Controller 中注入(inject) ngStorage,但我很好奇如何通过创建自定义全局函数(如上面的服务)来解耦对该第三方模块的依赖。

与上述相关的是将用户信息获取到 $scope:

$scope.localStorageToScope = function () {
$scope.UserName = $localStorage.UserName;
$scope.UserEmail = $localStorage.UserEmail;
$scope.UserRole = $localStorage.UserRole;
$scope.IsAuthenticated = $localStorage.IsAuthenticated;
}

我只能想到将此代码重复到我当然不想要的每个 Controller 。什么是更好的方法?

关于安全性的旁注:所有安全的用户操作都在服务器上重新验证,因此当有人破解本地存储机制时不会造成伤害。

最佳答案

所以其实你想封装一个第三方服务来减少你对第三方库的依赖。您的第三方库提供了一项服务 $localStorage ,其中包含您要访问的一些属性。这是一种方法:

function YourAuthService($localStorage) {
this.isAuthenticated = function () {
return $localStorage.IsAuthenticated;
}

this.username = function() {
return $localStorage.username;
}
}
myApp.service('YourAuthService', YourAuthService);

这将创建一个可注入(inject)的包装器服务,您可以像这样使用它:

function YourController(YourAuthService) {
console.log("Current username=" + YourAuthService.username());
console.log("Current isAuthenticated=" + YourAuthService.isAuthenticated());
}

请注意,您不需要知道身份验证服务如何计算出您查询的数据。您只需调用适当的方法,您的身份验证服务就会完成剩下的工作。这可以很容易地适应其他存储类型。

如果您想用更少的代码创建这样一个简单的包装器,那么(在您的特殊情况下)可以这样做:

function YourAuthService($localStorage) {
["isAuthenticated", "username", "furtherProperty", "yadayada"].forEach(function(propertyName) {
this[propertyName] = function() {
return $localStorage[propertyName];
}
});
}
myApp.service('YourAuthService', YourAuthService);

关于angularjs - 在所有 Angular Controller 中存储用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27962516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com