当您需要通过Angular8中的导航将数据传递到另一个组件时,最安全,最有效的方法是什么?

问题描述 投票:1回答:1

我目前正在开发基于用户身份验证的应用程序,其中每个用户都可以将学生校园注册为老师,目前,我正在使用一条具有两条路线的功能:

Route 1:它有一个Datagrid,其中列出了我已经创建的所有学生校园,每一行都有一个编辑按钮,可导航到“ Route 2”,其目的是编辑已经创建的学生校园。

路线2:具有用于创建学生校园的所有必填字段的表单。

如您所见,我需要传递学生校园ID来获取ngOnInit中的数据以填充字段并能够编辑上述内容,因此我要考虑几个选项:

选项1: URL中的通行证ID。

    this.router.navigate(['planteles/registrar', idPlantel]);

https://myapplication/planteles/registrar/1

选项2:通过带有queryParams的URL传递ID。

    this.router.navigate(['planteles/registrar'], { queryParams: { ID: idPlantel } });

https://myapplication/planteles/registrar?ID=1

选项3:导航附加状态对象中的通行证ID。

    this.router.navigate(['planteles/registrar'], { state: { id: idPlantel } });

选项4:共享服务和BehaviorSubject订阅数据。

    I owe you the code

我可以使用其中的任何一个,但每个都有问题。

我无法使用选项1和选项2,因为老师无法更改ID,因为这给了他获取另一位老师的学生校园数据并进行编辑的可能性,因此这是不安全的。选项3和选项4的问题是,当我刷新页面时,状态丢失了。

[当前,我对选项3有一种解决方法,如果状态未定义,则将用户重定向到上一页,但我不喜欢该解决方案。如果用户不使用LocalStorage重新加载页面,我想保留数据。

在此先感谢您的帮助或贡献。

javascript angular angular-router
1个回答
2
投票

选项1是此处的正确选项(以及您在现实世界中发现大多数网站的方式都已实现...包括我们现在正在使用的这一选项)。问题在于您的网络安全方法,而您需要修复的是后端。您正在接近Web安全性,好像前端安全性是真实的一样,事实并非如此。 Web安全性存在于您的后端。用户不应能够获取或查看或操纵不属于他们的数据。这必须由您的后端强制执行。

© www.soinside.com 2019 - 2024. All rights reserved.