2

构建一个应用程序,根据需要从商家的帐户中提取数据。

我已经设置了我的模型,安装了 attr_encrypted gem,并且所有内容都以加密的形式正确存储。

我创建了一个获取令牌并将其发送到 API 的方法,但我需要发送解密版本。令牌是用户特定的,所以我不知道它是什么..

如何发送令牌的解密版本?

在我的控制台中,我尝试过..

x = Merchant.find(1)
x.encrypted_token

并且返回加密版本很好..

但如果我尝试:

x.token

控制台显示 ArgumentError: must specify a :key

我已将其存储为环境变量..

所以我想我会通过这个但是如何?

我的模型中有这个:

attr_encrypted :token, :key => ENV['token_key']

来自评论的更新

这就是我的数据库的样子:

"Merchant(merchant_identifier: string, name: string, encrypted_token: text, 
marketplace: string, password_digest: string, email: string)"

我试过了

    attr_encrypted :token, :key => 'token_key'

它给了我一个密码错误。我正在使用 figaro 来存储环境变量.. 看起来很好..

继续来!!

我在 irb 做的是:

x = Merchant.find(2)
x.encrypted_token # yields "n4gZVJ8DKfp+p..."

但是如果我按照这个

x.token

我得到:

ArgumentError: must specify a :key
4

2 回答 2

1

不,您只需将其添加到您的 :attr_encrypted:

attr_encrypted :encrypted_token, :key => Rails.env.test? ? 'ssn_secret' : ENV['SSN_SECRET']

还有一个条件,当您将密钥放入文件时,它不会在生产中中断

此外:

默认情况下,加密的属性名称是 encrypted_#{attribute}(例如 attr_encrypted :email 将创建一个名为 encrypted_email 的属性)。因此,如果您将加密属性存储在数据库中,则需要确保表中存在 encrypted_#{attribute} 字段

所以做一个Merchant.inspectorMerchant.attribute_names看看你有什么样的列。

于 2015-08-26T16:42:54.980 回答
0

看起来密钥ENV['token_key']在环境中不存在。您正在使用?

确保它确实存在并重新启动该环境,它应该可以工作。

于 2021-01-31T22:27:09.347 回答