我有这样的链接:http://www.somesite.com/s/bkucoj?i=#{@client.id}
。
我如何确保客户端的ID将被安全传递(散列/加密),而不仅仅是裸号码?
所以我们的目标是得到类似的东西:
http://www.somesite.com/s/bkucoj?i=f1nSbd3bH34ghfAh12lcvzD
而不是
http://www.somesite.com/s/bkucoj?i=12
。
我怎样才能实现它?
还有什么,我还想确保,另一方面,客户端ID已正确获取 谢谢!
答案 0 :(得分:1)
执行此操作的最佳方法可能是在用户模型中添加一个额外的列(非空,唯一),该模型在用户创建时随机化。
before_create do
self.uuid = SecureRandom.uuid
end
然后,您可以使用uuid
来识别用户而不是ID。
当然,您需要在添加此列时修改所有现有用户。
您的迁移需要有3个部分。首先,您需要向users
表添加uniq,可空列uuid。然后,您需要遍历现有客户并填充此列。之后,您可以使列不可为空。它很可能看起来像这样:
class Blah000000000 < ActiveRecord::Migration
class User < ActiveRecord::Base
before_save { self.uuid ||= SecureRandom.uuid }
end
def up
add_column :users, :uuid, :string, unique: true
User.all.each &:save!
change_column :user, :uuid, string, unique: true, null: false
end
def down
remove_column :users, :uuid
end
end
答案 1 :(得分:1)
您可以添加额外的参数,即ID的HMAC或数字签名。收件人可以验证ID未更改。