小编Nor*_*Art的帖子

如何在排序的索引位置将元素推入数组?

假设我已经有一个包含这些文章的数组,按价格从低到高排序:

[
  { title: "Article 3", price: 1.49 },
  { title: "Article 1", price: 3.00 },
  { title: "Article 4", price: 5.99 },
  { title: "Article 2", price: 19.99 }
]
Run Code Online (Sandbox Code Playgroud)

基本上我想在正确的位置(按价格)将另一篇文章推入数组。我怎么能这样做?

我正在推送的新文章可能具有以下属性:

{ title: "Article 5", price: 12.00 }
Run Code Online (Sandbox Code Playgroud)

我期待这篇文章出现在索引 3(在文章 4 和 2 之间)。

更新(解决方案)

我使用@klutt 的答案和二进制搜索算法创建了一个原型方法:

Array.prototype.pushSorted = function(el, compareFn) {
  this.splice((function(arr) {
    var m = 0;
    var n = arr.length - 1;

    while(m <= n) {
      var k = (n + m) >> 1;
      var cmp …
Run Code Online (Sandbox Code Playgroud)

javascript arrays

9
推荐指数
1
解决办法
9886
查看次数

Firebase PHP JWT"OpenSSL无法验证数据:错误:0906D06C:PEM例程:PEM_read_bio:无启动行"

我正在通过App Engine使用Google Cloud PHP API.从客户端设备,通过POST使用Firebase身份验证令牌发送请求.根据Firebase PHP JWT的文档,我尝试使用以下代码解码令牌:

$decoded = JWT::decode($token, $key, array('RS256'));
Run Code Online (Sandbox Code Playgroud)

$ token是一行(由于安全原因,这是无效的):

eyJhbGciOiJSUzI1asdaNiIsImtpZCI6Ijk2N2Q3NzQ4YmM5NTMTIzNzRhZWQasdasd3MzEyYzcwNjEyZTRlNTM4NmUifQ.tuaAsjdlkjvsdngeoijAnlnbfgLkoosdfKLnm,werkldsfNkndfkdsnfkfnlNKL2i34nkNJioj4Kkoj234j%jij1kjojsdffds98giojerNNjasndasiNjasdnJAjnasdkjnFoFjoFJOIAASD8990adsaaDknnkngs.v_Ko6HZjrahbihLbw2Bm7EuslEC2SSHXNK79rDbD9qIIVYxPjCsubsdfkyAWDIoJHwjkM9TtssYS-1Cjd_xkXghfILuDZpzLsHV6rF20J4n3eUTrsnmLDHK6UB5N3yK2LYoF1UoFrsiyWenfqELfE4Gx5wlfmsylTS1foS2CWRrT1ccqmJBinWiY6JNUS-0gg-2Aecf_VJ63RD9308sBKy1DUsBeje9yG8w2YpYsAqKIlMTC-FqLLpHlKe4LZxcveiqSF4J6PgvcLSPTMmg7-Li_8m41O-wfU1zwSpS1SJ73RJNg-kvRZ1y1ll8ExqXjZkazRDVkYVo6yu5AXi1Onl6FqBLA
Run Code Online (Sandbox Code Playgroud)

通过JWT.io检查令牌将给我一个正确的有效载荷.

现在为$ key部分.我已从Google API控制台下载了默认服务帐户JSON文件.如果我使用"private_key",它看起来像:

-----BEGIN PRIVATE KEY-----\n[VERY_LONG_PRIVATE_KEY]\n-----END PRIVATE KEY-----\n
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

openssl_verify(): supplied key param cannot be coerced into a public key
Run Code Online (Sandbox Code Playgroud)

我在StackOverflow上找到了一个答案,这可以用来将私钥转换为公钥:

$private_key = openssl_pkey_get_private($c->serviceAccount->private_key);
$details = openssl_pkey_get_details($private_key);
$public_key = $details['key']
Run Code Online (Sandbox Code Playgroud)

因此,如果我使用$ public_key,我会收到另一个错误,说明以下内容:

Uncaught exception 'DomainException' with message 'OpenSSL unable to verify data: error:0906D06C:PEM routines:PEM_read_bio:no start line
Run Code Online (Sandbox Code Playgroud)

公钥如下:

-----BEGIN PUBLIC KEY-----\n[VERY_LONG_KEY]\n-----END PUBLIC KEY-----\n
Run Code Online (Sandbox Code Playgroud)

所以它似乎应该工作.但事实并非如此.算法RS256也是正确的算法.

任何帮助赞赏!

php jwt firebase firebase-authentication

6
推荐指数
1
解决办法
1033
查看次数

通过 Firebase 存储上传图片,任何人都可以通过公共链接访问它

每当我将图像上传到Firebase Storage 时,只能通过“下载链接”访问该文件。

如果我想让任何人访问这个文件怎么办?

如果我转到Google Platform Storage并输入 Firebase 使用的相同存储桶,我可以看到“公共链接”未选中。

上传照片后如何自动检查?

此类操作可以通过Google Cloud Storage API 完成,但似乎没有任何选项可以通过Firebase 完成

此外,通过Firebase上传的所有图像都有一个Content-Type of "application/octet-stream".

由于我正在上传图像,因此我希望它具有“ image/jpeg ”或“ image/png ”。有没有办法更改元数据?

更新:我问这个的原因是因为如果一个人使用 Instagram 来创建一个应用程序,就像成千上万张图片的提要一样。不需要为正在获取的每个图像请求下载链接,因为默认情况下,问题中的图像应该已经向公众开放。Firebase 文件上传阻止了这一点,因此每个用户必须为每个图像发出一个请求(每次应用启动可能是大量图像)。例如,Firebase Flame 订阅计划的限制为每月 100,000 次下载/上传。这使得创建具有数千个用户的图像源变得不切实际,每个用户都有数千个图像请求。文件应该可以选择在上传期间创建公共链接,就像 Google Cloud Storage API 本身一样。

ios firebase firebase-storage

5
推荐指数
1
解决办法
1612
查看次数