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

How to generate Cloudinary Authentication signatures in PHP(Laravel)

我将 Cloudinary 与 Laravel 一起使用,我想让用户从现有文件中选择或上传新文件。如何在后端生成身份验证签名(在我的例子中为 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 帐户

您需要使用 Cloudinary PHP SDK or there is a Cloudder, a Laravel wrapper for Cloudinary,它有一些不错的助手,尽管它没有涵盖所有用例。

Cloudinary documentation 涵盖了使用 PHP SDK 上传图片和视频。

您可以使用任何 SHA-256 哈希 function/library 来使用文档中提到的值(云名称、时间戳、用户名)创建签名。以 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 代码中,您传递相同的时间戳和来自 server-side 代码的签名,它应该打开并以您的身份登录指定用户:

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)
});