我将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帐户
答案 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.'×tamp='.$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上传图像和视频的情况。