人们从网址获取数据http://domain/api/user/1
,1
是数据库中的id
(主键)。我们希望避免这种情况,以防止人们检测到ID。
然后我发现Hashids可以将id编码/解码为字符串,网址可能会更改为http://domain/api/user/D42dhDLdk
乍一看这是一个很棒的解决方案,但是如何在实际应用中使用它?
1编码
当从数据库中检索记录时,我们应该将id编码为字符串,这是完成这项工作的正确位置吗?我能想到的唯一正确的位置是对记录进行反序列化,例如,当您提供json
的数据时,您可以将相关的ids
编码为字符串,但您必须确保哪些字段应该被编码。
例如:
{user:{id:1,name:'xx',projects:[{id:1,name:'p1',id:2,name:'p2'}]},icon_id:1}}
id
user
和project
的{{1}}应该被编码,没有明确的规则来抽象。
2解码
从db中检索数据时,你必须将字符串解码为id,我认为我们可以在icon_id
或route
层执行此操作,但是仍然没有明确的规则来制作摘要由于controller
可能存在于url或查询参数中,因此可以使用中间件。
我没有找到谷歌的任何一般解决方案,所以我想知道你是如何处理这类问题的?
更新
我正在使用Mysql,并使用sequelzie作为ORM工具。