首页 > 解决方案 > 如何在 Angular 中生成服务器端会话变量?

问题描述

我已经 jz 完成了对我自己的 Angular 应用程序的一点修改。首先,我有一个包含 PUBLIC、MEMBER、ADMIN 访问角色的菜单导航列表。登录后,我将角色“会员”存储给用户,他可以在其中查看公共和会员链接。(使用 Chrome)但后来我打开

Developer Tools > Application > Storage > Session Storage

将“角色”变量从“成员”操作到“管理员”,我可以查看秘密管理员链接。

这不是编码结构问题,而是“如何以安全方式存储会话变量”。在此之前,我认为 PHP 的会话变量等同于“会话存储”,社区表示 SESSION 不能由用户https://stackoverflow.com/a/6912409/8163746更改。

然后现在我了解到,有两种类型的会话,服务器端会话和客户端会话。对于标准的角度应用程序,存储“电子邮件”、“角色”的最佳方式是什么,但用户不能修改?我在会话中需要它们的原因是它们可以很容易地被调用

Role - Show/Hide navigation menu items
Email - to perform SQL filter, SELECT fields FROM Record WHERE email=Session.Email

感谢您的建议。

标签: angularsessionsession-storage

解决方案


用户可以修改浏览器上的所有内容。因此,在执行操作之前,您还需要验证您在服务器上选择的任何会话机制。

例如,您可以使用 Json Web Tokens (JWT)。

  1. 当您使用 API 登录时,API 会生成一个安全令牌,该令牌会在身份验证成功后发送给客户端。该安全令牌是加密的,可以包含任何信息,例如用户 ID 和角色。

  2. 然后将该令牌存储在浏览器上(在本地存储、会话存储或 cookie 中)。Cookies 是最安全的选项,允许身份验证与 Angular Universal 一起使用

  3. 令牌随每个 API 调用一起传递。如果您使用 cookie,它们将自动传递。如果使用本地或会话存储,您可以创建一个HttpInterceptor将令牌添加到请求中。

  4. 然后,API 会在执行操作之前验证令牌是否有效以及用户角色。

因此,即使您将用户角色存储在客户端,并且如果客户端修改该角色,该操作也不会在 API 端执行,这是最重要的。


推荐阅读