在 rails 中解码已签名的 cookie?

Decode a signed cookie in rails?

所以我有一个具有以下值的签名 cookie

IjVvVGdIOW1pUU44Qkk5NFZZUl9Udnci--a3c3b748fd207ba1c537b590dd458b4855677146

我需要对其进行解码并得到以下值

5oTgH9miQN8BI94VYR_Tvw

我试过

Base64.decode64(cookie_value.split('--').first)

但它给了我错误的值,它在字符串中添加了这些该死的斜线,所以我最终得到

"\"5oTgH9miQN8BI94VYR_Tvw\"" 

请试试这个

require 'rack'

puts Rack::Session::Cookie::Base64::Marshal.new.decode("IjVvVGdIOW1pUU44Qkk5NFZZUl9Udnci")

也可以解密

Marshal.load(ActiveSupport::Base64.decode64(the_cookie_value.split("--").first)

but it gives me the wrong value, it adds these damn slashes in the string so I end up with

"\"5oTgH9miQN8BI94VYR_Tvw\""

它没有添加任何斜杠。这里的问题是您返回的字符串包含在双引号 " 之间。 \"这里是转义字符。

这里:

Base64.decode64 "IjVvVGdIOW1pUU44Qkk5NFZZUl9Udnci"
# => "\"5oTgH9miQN8BI94VYR_Tvw\""
puts Base64.decode64 "IjVvVGdIOW1pUU44Qkk5NFZZUl9Udnci"
# "5oTgH9miQN8BI94VYR_Tvw"

由于问题是不需要的 "s。您可以按如下方式删除它们:

Base64.decode64(cookie_value.split('--').first).chomp('"').reverse.chomp('"').reverse
# => "5oTgH9miQN8BI94VYR_Tvw"

我最终使用了以下内容:

MultiJson.load(Base64.decode64(cookie_value.split('--').first))

可能只适用于 rails 4.1 +,虽然我不确定