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} フィールドがテーブルに存在することを確認する必要があります

or を実行して、どのような種類の列があるMerchant.inspectかを確認してください。Merchant.attribute_names

于 2015-08-26T16:42:54.980 に答える