keystonejs cloudinary无效签名错误

时间:2015-07-30 21:47:41

标签: upload cloudinary keystonejs

我在我的某个模型中实现了Cloudinary类型,但在尝试将其保存到Cloudinary时会收到此错误:

Image upload failed - Invalid Signature              
ea4401c2ebf292208d28f9dc88c5ff1c4e73761d. 
String to sign - 'tags=trial-images_image,trial-    
images_image_55ba9896c6d05b8704802f0a,dev&timestamp=1438292137'.

我不知道该怎么办,有人经历过这个吗?

2 个答案:

答案 0 :(得分:1)

您应该确保正确计算签名。具体来说,您应该同时签署标签和时间戳(当然包括api_secret)。

答案 1 :(得分:0)

我有完全相同的问题。 请仔细检查您是否正确设置了配置参数(云名称,api密钥,api secret)。可以通过访问cloudinary帐户上的管理控制台找到它们。 (仪表板>帐户详细信息)。

根据他们的文档:http://cloudinary.com/documentation/rails_additional_topics#configuration_options

  

配置参数可以使用位于Rails项目的config目录下的cloudinary.yml配置文件进行全局设置。等...

     

以下是cloudinary.yml文件的示例:

production:
  cloud_name: "sample"
  api_key: "874837483274837"
  api_secret: "a676b67565c6767a6767d6767f676fe1"
     

等...

     

...另一个配置选项是使用Rails初始化程序文件。您可以将名为cloudinary.rb的文件放在Rails项目的/ config / initializers文件夹中。这是一个初始化代码示例:

Cloudinary.config do |config|
   config.cloud_name = 'sample'
   config.api_key = '874837483274837'
   config.api_secret = 'a676b67565c6767a6767d6767f676fe1'
   config.cdn_subdomain = true 
 end
     

最后一个配置选项允许您通过定义CLOUDINARY_URL环境变量来动态配置Cloudinary库。配置URL可在您帐户的管理控制台的仪表板中找到。通过PaaS插件(例如,Heroku)使用Cloudinary时,会在部署环境中自动定义此环境变量。这是一个示例值:

     

CLOUDINARY_URL=cloudinary://874837483274837:a676b67565c6767a6767d6767f676fe1@sample

我是如何解决问题的

我通过采用(并略微修改)第一个选项解决了这个问题,即在cloudinary.yml目录中创建config文件并编写以下代码:

(config/cloudinary.yml)

development:
  cloud_name: <%= ENV["CLOUD_NAME"] %>
  api_key: <%= ENV["API_KEY"] %>
  api_secret: <%= ENV["API_SECRET"] %>

test:
  cloud_name: <%= ENV["CLOUD_NAME"] %>
  api_key: <%= ENV["API_KEY"] %>
  api_secret: <%= ENV["API_SECRET"] %>

production:
  cloud_name: <%= ENV["CLOUD_NAME"] %>
  api_key: <%= ENV["API_KEY"] %>
  api_secret: <%= ENV["API_SECRET"] %> 

请注意,配置参数(云名称,api密钥,api secret)被设置为环境变量(CLOUD_NAMEAPI_KEYAPI_SECRET),以防止它们暴露在外代码是公开共享的。 (您不想对敏感信息进行硬编码)

您可以通过编辑.bash_profile文件来设置bash中的环境变量,该文件位于主目录中(并隐藏):

(.bash_profile)
.....
export CLOUD_NAME="your cloud name"
export API_KEY="your api key"
export API_SECRET="your api secret"
.....

例如,您可以在终端中键入echo $CLOUD_NAME来检查是否正确设置了这些环境变量。(您可能需要退出并重新启动终端)。如果成功,输出将如下所示:

echo $CLOUD_NAME 
> your cloud name

最后,如果您计划将应用程序部署到heroku,您可能还希望通过在终端中键入以下命令来添加cloudinary作为插件,这对于入门选项是免费的:

heroku addons:create cloudinary:starter

将所有这些放在一起可能会解决您的问题。

最后但并非最不重要的是,我发现以下博客文章非常有用:

http://www.uberobert.com/rails_cloudinary_carrierwave/

它解释了如何使用cloudinary和carrierwave上传和操作应用程序中的图像。

希望它有所帮助!