如何在PHP(Laravel)中生成Cloudinary身份验证签名

时间:2019-06-20 11:04:08

标签: javascript php jquery laravel cloudinary

我将Cloudinary与Laravel结合使用,我想让用户从现有文件中选择或上传新文件。如何在BackEnd(我的情况下为php)上生成身份验证签名?并将其传递给前端(JavaScript)?

我尝试使用未签名的上传预设让用户上传而无需登录,但没有运气。

mediaWidget = cloudinary.createMediaLibrary({
      cloud_name: "my-cloud-name",
      api_key: 'my-api-key',
      username: 'email id',
      uploadPreset: "unsigned-upload-preset",
      multiple: false,
    }, {
      insertHandler: function (data) {
        data.assets.forEach(asset => { console.log("Inserted asset:",
        JSON.stringify(asset, null, 2)) })
        }
      }
    );

我没有收到任何错误,但这始终要求用户登录到cloudinary帐户

2 个答案:

答案 0 :(得分:2)

您可以使用任何SHA-256哈希函数/库使用文档中提到的值(云名称,时间戳,用户名)来创建签名。以PHP为例,Media Library documentation中的示例如下:

<?php

$cloud_name = 'my_company';
$timestamp = '1518601863';
$username= 'jane@mycompany.com';
$api_secret = 'abcd';

$payload_to_sign = 'cloud_name='.$cloud_name.'&timestamp='.$timestamp.'&username='.$username;

$signature = hash('sha256', $payload_to_sign . $api_secret);
print($signature);
?>

这提供了与文档示例相同的输出:5cbc5a2a695cbda4fae85de692d446af68b96c6c81db4eb9dd2f63af984fb247

然后,在用于启动“媒体库”窗口小部件的Javascript代码中,传递相同的时间戳和服务器端代码中的签名,然后它将打开并以指定用户身份登录:

window.ml = cloudinary.createMediaLibrary({
    cloud_name: 'my_company',
    api_key: '1234567890',
  username: 'jane@mycompany.com',
  timestamp: '1518601863',
  signature: '5cbc5a2a695cbda4fae85de692d446af68b96c6c81db4eb9dd2f63af984fb247' 
}, function(error, result) {
      console.log(error, result)
});

答案 1 :(得分:0)

您需要使用Cloudinary PHP SDK或其中一个Cloudder, a Laravel wrapper for Cloudinary的帮助器,尽管它不能涵盖所有用例。

Cloudinary documentation涵盖了使用PHP SDK上传图像和视频的情况。