使用内置的OpenSSL库加密和解密id
网址如下:http://localhost:3000/requests/Ym7c8FQQlCe5FvotzKu4yw==%0A 我想从中删除==%0A?怎么样?
require 'openssl'
require 'base64'
module Obfuscate
def self.included(base)
base.extend self
end
def cipher
OpenSSL::Cipher::Cipher.new('aes-256-cbc')
end
def cipher_key
'blah!'
end
def decrypt(value)
c = cipher.decrypt
c.key = Digest::SHA256.digest(cipher_key)
c.update(Base64.decode64(value.to_s)) + c.final
end
def encrypt(value)
c = cipher.encrypt
c.key = Digest::SHA256.digest(cipher_key)
Base64.encode64(c.update(value.to_s) + c.final)
end
end
在我的模特中:
class MyModel < ActiveRecord::Base
include Obfuscate
def to_param
encrypt id
end
end
答案 0 :(得分:0)
创建创建迁移时,它应该是这样的
class CreateEmails < ActiveRecord::Migration
def change
create_table :users, :id => false do |t|
t.uuid :id, :primary_key => true
t.uuid :something_id # belongs_to :something
t.timestamps
end
add_index :emails, :id
end
end
然后在您的模型中,您只需要包含include ActiveUUID::UUID
这是一个uuid 1dd74dd0-d116-11e0-99c7-5ac5d975667e
我希望这有助于
答案 1 :(得分:0)
另一种解决方案是使用Friendly ID。基本上,它会使用id
或其他字段替换路线中的name
。它改变了
/requests/Ym7c8FQQlCe5FvotzKu4yw==%0A
到
/requests/some_cool_name_in_your_database
这样,您的用户就不会看到id
,而是会看到一些更漂亮的东西。如果您的用户要返回该页面,它仍然有效,因为您有一个有效的&#34; id&#34;。