前端校验还是后端校验的问题

213 天前
 LuffyPro

RT,场景大致如下:

个人看法:

想知道大佬们处理这种场景的选择和原因,另外前端有相关组件(比如 vue )吗?谢谢大家回复。

3424 次点击
所在节点    程序员
37 条回复
facebook47
213 天前
都校验🙈
IDAEngine
213 天前
必须都校验,要么就全部交给后端,肯定不能交给用户
InDom
213 天前
首先,无论如何,后端必须校验,这是出于安全考虑。

至于前端,建议校验,这是出于用户体验考虑。

至于前端完全依赖后端校验,不是不行,说好听了叫最大化兼容性。
lneoi
213 天前
提交的时候拿到数据遍历对比一下,并不是太麻烦。
接口也可以约定一样的数值就视为不变,手机号什么的再多判定一下是不是用户本身。
但如果接口不做校验,万一直接调接口做数据修改呢
Removable
213 天前
不要相信用户端传入的任何数据,后端必须要有最后的关卡
rabbbit
213 天前
大多数情况前后都校验,非挑一个就后端校验。内部用的,xx 玩具管理系统啥的随意。
rabbbit
213 天前
例如修改绑定手机号的功能,接口设计应该是:
1 校验用,接受手机号作为参数,如果手机号和绑定的手机号一致,返回布尔值。
2 提交用,接受手机号作为参数,如果手机号和绑定手机号一致,返回错误码。

然后前端在用户输入时调用接口 1 校验手机号是否和绑定的手机号一致,在用户点击提交时调用接口 2 提交手机号。
当然很多情况下,例如内部用的 xx 管理系统,接口 1 就省了。
rabbbit
213 天前
校验用,接受手机号作为参数,如果手机号和绑定的手机号一致,返回布尔值。
->
校验用,接受手机号作为参数,判断手机号是否和绑定的手机号一致,返回布尔值。
LuffyPro
213 天前
@facebook47 @IDAEngine @InDom @lneoi @Removable @rabbbit 谢谢大家回复
当然这里后端是要校验数据的,但我的意思不是后端不做校验,而是有没有必要特殊处理这种数据没变化但又把数据提交上来的场景,比如上面例子说的手机号码,手机号码是唯一的,如果你传过来的手机号码,数据库中已经存在了,后端就不给提交,但现在后端需要校验多一次传过来的手机号码是否等于他自己的手机号码,如果是这种特殊情况,能让他提交。如果前端校验该表单项没发生数据变化不提交上来,后端就不需要做这层校验了,接口传上来的手机号默认都是当作想要修改的。不过这样前端需要提交前判断相关表单项,而且不大可能每个表单项都去做这种数据无变化的判断,来决定要不要将手机号码传给接口。
LuffyPro
213 天前
@LuffyPro 不传上来,后端当作你不想改手机号码,传上来表示你想改手机号码。
rabbbit
213 天前
@LuffyPro
看你的业务场景需求,没具体场景无法判断。
举个例子,如果你的表单里有多项,例如有个表单的作用是编辑餐厅的信息,有地址、手机号、营业时间等等,让前端去校验然后不发送未变更的表单项是不合理的。
LuffyPro
213 天前
@rabbbit 嗯嗯,不过这个判断交给后端去判断感觉也怪怪的,相当于把这个数据是否变化的判断交给后端去做了。当然你列举里面的很多字段是不需要判断数据是否发生变化的,因为没有手机号码有特殊的唯一性要求,其他数据提交上来直接覆盖就行了。
rabbbit
213 天前
当然,后端非说防止其他人改了别的选项被覆盖也行。例如两个人同时编辑一个页面,后提交的那个会把先提交的那个覆盖掉。
这时候就谁屌大厉害听谁的。
rabbbit
213 天前
@LuffyPro
或许你们可以改页面的设计,把修改手机号放在单独的表单中,而不是和地址、营业时间混在一个表单里。
old9
213 天前
前端只提交改动过的数据,前端框架一般都可以或通过库来判断是否改动过,关键词搜搜 form state dirty/pristine
后端就正常处理,前端提交上来什么就校验什么
IvanLi127
213 天前
前端校验只是为了提升用户体验,后端校验是为了数据合法性。
不过你说手机号变化这事,正常来说用户没碰过这个 input 就当未修改,碰了就是改了,不需要判断是否一致,避免数据过时导致坑用户。判断到底改没改得交给后端做,让后端兜底。另外这种最好单独触发编辑,单独提交,避免意外修改。
F7TsdQL45E0jmoiG
213 天前
后端是兜底的
vanchKong
213 天前
问一嘴,前端校验都是手动校验吗?还是有什么库比较方便的进行校验
laobobo
213 天前
这都说了多少次了,都校验!都校验!都校验!
alanhe421
213 天前
楼上说的多了,both

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1043073

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX