当前位置: 首页 > 面试题库 >

我可以还是应该在Angularjs中使用Global变量来存储登录用户?

杜祺
2023-03-14
问题内容

我刚开始接触角并正在开发我的第一个“真实”应用程序。我正在尝试构建一个日历/计划应用程序(源代码都可以在github上看到),并且我希望能够在有用户登录的情况下更改内容(即显示与他们相关的详细信息),但是这里有个问题:

  1. 我不希望该应用依赖于已登录的用户(需要配置为可公开,私密或同时工作)

  2. 如果可以避免,我不想在此应用程序中实现用户/登录(我想最终将我的应用程序包含在可能已实现但不一定使用任何特定安全框架实现或仅限于任何应用程序的其他应用程序中)

我有一个创建user可以在我的应用程序中引用的全局变量的想法,或者如果我必须实现一个系统以在此应用程序中完成所有操作,我可以以某种抽象的方式进行操作,以便可以注入不同的选项在。

我的一些想法或对应该做的事情的理解可能是完全错误的,对基本知识一无所知,但是我真的不知道我应该采取什么方法。

如果相关,我目前没有任何后端,但最终希望使用MongoDB进行存储,使用nodejs进行服务,但我也想尝试使其保持开放式,以允许其他人使用不同的存储/后端,例如sql和的PHP

有没有user可以从另一个(父代)应用程序注入/填充的全局变量/服务?

如果是这样,最好的方法是什么?如果不是,我为什么以及应该采用什么方法以及为什么?

更新资料

我相信在线评论和向我提出的一些建议,即服务将是最好的选择, 我将如何从父应用程序注入到此应用程序服务中呢?


问题答案:

如果您的(单个)页面由服务器动态呈现,并且服务器知道您是否已登录,则可以执行以下操作:

动态呈现脚本标签,该标签产生:

<script>
     window.user = { id: 1234, name: 'User A', isLoggedIn: true };
</script>

对于非登录用户:

<script>
     window.user = { isLoggedIn: false };
</script>

为方便起见,请将用户复制到angular的IOC内的值:

angular.module('myApp').value('user', window.user);

然后,您可以在DI中使用它:

angular.module('myApp').factory('myService', function(user) {
    return {
        doSomething: function() {
            if (user.isLoggedIn) {
                ...
            } else {
                ...
            }
        }
    };
});

棘手的事情(在执行[SEE COMMENTS]之前应该进行两次操作)正在 扩展 $ scope:

angular.module('myApp').config(function($provide) {
    $provide.decorator('$controller', function($delegate, user) {
        return function(constructor, locals) {
            locals.$scope._user = user;
            return $delegate(constructor, locals);
        };
    });
});

这段代码修饰了$controller服务(负责构造控制器),并且基本上说$scope,将在对象传递给控制器​​之前,将通过_user属性进行增强。

让它自动$ scoped意味着您可以在任何地方的任何视图中直接使用它:

<div ng-if="_user.isLoggedIn">Content only for logged-in users</div>

这有些冒险,因为您可能最终会与原始$ scope API或添加到控制器中的属性发生命名冲突。

不用说,这些东西仅在客户端运行,并且很容易被篡改。您的服务器端代码应始终检查用户并返回正确的数据子集或接受正确的操作。



 类似资料:
  • 当使用docker和ASP.NET核心进行开发时,我应该使用用户秘密还是环境变量?我使用的是Visual Studio2017在添加项目时创建的默认docker文件,该文件使用Microsoft/ASPNetCore:1.1,我相信是一个linux映像。 我如何在docker中设置User-secrets/Environment变量,使其在启动时设置,但不包含在源代码中?

  • 问题内容: 在字符串中串联变量或使用花括号代替是有利还是不利? 级联: 大括号: 就我个人而言,我一直都在串联字符串,因为我使用UEStudio,并且在串联时会突出显示具有不同颜色的PHP变量。但是,如果不分解变量,则不会。它使我的眼睛更容易找到长字符串等中的PHP变量。 人们对有关SQL感到困惑。 这 不是 这个问题的意思。 我已经更新了示例以避免混淆。 问题答案: 如果查看输出,则以下所有内容

  • 问题内容: 使用JavaScript更改当前网页位置的首选方法是什么?我已经看到使用window.navigate和document.location了。行为上有区别吗?浏览器的实现是否有所不同? 问题答案: 是用于更改当前窗口位置的标准实现。

  • 问题内容: 应该使用这两种方法中的哪一种来编码URL? 问题答案: 这取决于您实际想要做什么。 encodeURI假定输入是一个完整的URI,其中可能包含一些需要编码的字符。 encodeURIComponent将对具有特殊含义的所有内容进行编码,因此可以将其用于URI的组件,例如

  • 问题内容: 我正在使用c / c 为osx和linux开发命令行界面可执行文件。该项目将链接到opencv。我应该使用libc 还是libstdc ++? 问题答案: 我会为每个操作系统使用本机库,即GNU / Linux上的libstdc 和Mac OS X上的libc 。 libc 在GNU / Linux上不是100%完整的,而libstdc 更完整时使用libc并没有真正的优势。另外,如果

  • 问题内容: 和CSS 和有什么不一样?我应该使用哪一个?为什么? 问题答案: 所有这些答案似乎都是不正确的。与直觉相反,在CSS 中不是pixel 。至少不是在简单的物理意义上。 从W3C,EM,PX,PT,CM,IN…阅读本文,了解如何为CSS发明一个“神奇的”单元。的含义因硬件和分辨率而异。(该文章是最新的,最新更新为2014-10。) 我自己的思考方式: px单位是CSS的魔术单位。它与当前